import type { DropEvent } from '../../../../DragDrop';
import type { ITableColumnEditorChangedEventDetail, TableSortChangedEvent } from '../../../events';
import { TableSelectionMode } from '../../../Types/TableSelectionMode';
import { TableSelectionType } from '../../../Types/TableSelectionType';
import type { TableSortMode } from '../../../Types/TableSortMode';
import { ItemsElement } from '../Abstracts/Items/ItemsElement';
import { TableElementIntl } from '../Table/intl/TableElementIntl';
import type { IDataTableColumnDefinition } from './IDataTableColumnDefinition';
import type { IDataTableElementProps } from './IDataTableElementProps';
declare const DataTableElement_base: (abstract new (...args: Array<any>) => import("../../../Behaviors/Themeable").IThemeableProps) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Appearanceable").IAppearanceableProps) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Disableable").IDisableableProps) & (abstract new () => ItemsElement<{}>) & import("../../../Behaviors/Themeable").IThemeableCtor;
/**
 * DataTable - A comprehensive data presentation component for displaying structured information in rows and columns.
 *
 * @description
 * Provides advanced data table functionality including sorting, filtering, pagination, and selection
 * capabilities. Designed for displaying large datasets with efficient rendering and user interaction
 * features for data analysis and management tasks.
 *
 * @name DataTableElement
 * @element mosaik-data-table
 * @category Selectors
 *
 * @csspart banner - The banner part.
 * @csspart editor - The editor part.
 * @csspart editor-panel - The editor-panel part.
 * @csspart editor-panel-backdrop - The editor-panel-backdrop part.
 * @csspart table - The table part.
 *
 * @cssprop {String} --data-table-border-radius - The table border radius CSS custom property.
 * @cssprop {String} --data-table-font-family - The table font family CSS custom property.
 * @cssprop {String} --data-table-font-letter-spacing - The table font letter spacing CSS custom property.
 * @cssprop {String} --data-table-font-line-height - The table font line height CSS custom property.
 * @cssprop {String} --data-table-font-size - The table font size CSS custom property.
 * @cssprop {String} --data-table-font-text-decoration - The table font text decoration CSS custom property.
 * @cssprop {String} --data-table-font-text-transform - The table font text transform CSS custom property.
 * @cssprop {String} --data-table-font-weight - The table font weight CSS custom property.
 * @cssprop {String} --data-table-gap - The table gap CSS custom property.
 * @cssprop {String} --data-table-padding-bottom - The table padding bottom CSS custom property.
 * @cssprop {String} --data-table-padding-left - The table padding left CSS custom property.
 * @cssprop {String} --data-table-padding-right - The table padding right CSS custom property.
 * @cssprop {String} --data-table-padding-top - The table padding top CSS custom property.
 * @cssprop {String} --data-table-shadow - The table shadow CSS custom property.
 * @cssprop {String} --data-table-shadow-blur - The table shadow blur CSS custom property.
 * @cssprop {String} --data-table-shadow-color - The table shadow color CSS custom property.
 * @cssprop {String} --data-table-shadow-offset-x - The table shadow offset x CSS custom property.
 * @cssprop {String} --data-table-shadow-offset-y - The table shadow offset y CSS custom property.
 * @cssprop {String} --data-table-shadow-spread - The table shadow spread CSS custom property.
 * @cssprop {String} --data-table-transition-duration - The table transition duration CSS custom property.
 * @cssprop {String} --data-table-transition-mode - The table transition mode CSS custom property.
 * @cssprop {String} --data-table-transition-property - The table transition property CSS custom property.
 * @cssprop {String} --data-table-translate - The table translate CSS custom property.
 *
 * @dependency mosaik-backdrop - The Backdrop element.
 * @dependency mosaik-banner - The Banner element.
 * @dependency mosaik-button - The Button element.
 * @dependency mosaik-table - The Table element.
 * @dependency mosaik-table-body - The Table Body element.
 * @dependency mosaik-table-body-cell - The Table Body Cell element.
 * @dependency mosaik-table-body-row - The Table Body Row element.
 * @dependency mosaik-table-column-editor - The Table Column Editor element.
 * @dependency mosaik-table-header - The Table Header element.
 * @dependency mosaik-table-header-cell - The Table Header Cell element.
 * @dependency mosaik-table-header-row - The Table Header Row element.
 *
 * @example
 * ```html
 * <!-- Data table with auto-generated columns -->
 * <mosaik-data-table id="userTable" auto-generate-columns></mosaik-data-table>
 * <script>
 *   document.getElementById('userTable').source = [
 *     { id: 1, name: 'John Doe', email: 'john@example.com', role: 'Admin' },
 *     { id: 2, name: 'Jane Smith', email: 'jane@example.com', role: 'User' }
 *   ];
 * </script>
 *
 * <!-- Data table with alternating rows and custom columns -->
 * <mosaik-data-table id="productTable" alternating></mosaik-data-table>
 * <script>
 *   const table = document.getElementById('productTable');
 *   table.columnDefinitions = [
 *     { key: 'sku', header: 'SKU' },
 *     { key: 'name', header: 'Product' },
 *     { key: 'price', header: 'Price' }
 *   ];
 *   table.source = productData;
 * </script>
 * ```
 *
 * @public
 */
export declare class DataTableElement extends DataTableElement_base implements IDataTableElementProps {
    private readonly _intl;
    private _alternating;
    private _autoGenerateColumns;
    private _caption;
    private _columnDefinitions;
    private _selectionType;
    private _selectionMode;
    private _resizable;
    private _sortable;
    private _pinable;
    private _hideable;
    private _autoSizeable;
    private _columnChoosable;
    private _reorderable;
    private _sortMode;
    private _editorOpened;
    private _sorted;
    private _sortedSource;
    private _columnWidths;
    private _suppressColumnsChanged;
    /**
     * @public
     */
    constructor();
    /**
     * Returns the `is` property.
     *
     * @public
     * @static
     * @readonly
    */
    static get is(): string;
    /**
     * Returns the `intl` property.
     *
     * @public
     * @readonly
     */
    get intl(): TableElementIntl;
    /**
     * Gets or sets the `alternating` property.
     *
     * @public
     * @attr
     */
    get alternating(): boolean;
    set alternating(value: boolean);
    /**
     * Gets or sets the `autoGenerateColumns` property.
     *
     * @public
     * @attr
     */
    get autoGenerateColumns(): boolean;
    set autoGenerateColumns(value: boolean);
    /**
     * Gets or sets the `columnDefinitions` property.
     *
     * @public
     */
    get columnDefinitions(): Array<IDataTableColumnDefinition>;
    set columnDefinitions(value: Array<IDataTableColumnDefinition>);
    /**
     * Gets or sets the `caption` property.
     *
     * @public
     * @attr
     */
    get caption(): string;
    set caption(value: string);
    /**
     * Gets or sets the `selectionType` property.
     *
     * @public
     * @attr
     */
    get selectionType(): TableSelectionType;
    set selectionType(value: TableSelectionType);
    /**
     * Gets or sets the `selectionMode` property.
     *
     * @public
     * @attr
     */
    get selectionMode(): TableSelectionMode;
    set selectionMode(value: TableSelectionMode);
    /**
     * Gets or sets the `resizable` property.
     * When `true`, all columns are resizable by default unless overridden per column.
     *
     * @public
     * @attr
     */
    get resizable(): boolean;
    set resizable(value: boolean);
    /**
     * Gets or sets the `sortable` property.
     * When `true`, all columns are sortable by default unless overridden per column.
     *
     * @public
     * @attr
     */
    get sortable(): boolean;
    set sortable(value: boolean);
    /**
     * Gets or sets the `pinable` property.
     * When `true`, all columns are pinable by default unless overridden per column.
     *
     * @public
     * @attr
     */
    get pinable(): boolean;
    set pinable(value: boolean);
    /**
     * Gets or sets the `hideable` property.
     * When `true`, all columns are hideable by default unless overridden per column.
     *
     * @public
     * @attr
     */
    get hideable(): boolean;
    set hideable(value: boolean);
    /**
     * Gets or sets the `autoSizeable` property.
     * When `true`, all columns support auto-sizing by default unless overridden per column.
     *
     * @public
     * @attr
     */
    get autoSizeable(): boolean;
    set autoSizeable(value: boolean);
    /**
     * Gets or sets the `columnChoosable` property.
     * When `true`, the column chooser is available for all columns by default unless overridden per column.
     *
     * @public
     * @attr
     */
    get columnChoosable(): boolean;
    set columnChoosable(value: boolean);
    /**
     * Gets or sets the `reorderable` property.
     * When `true`, all columns can be reordered via drag and drop by default unless overridden per column.
     *
     * @public
     * @attr
     */
    get reorderable(): boolean;
    set reorderable(value: boolean);
    /**
     * Gets or sets the `sortMode` property.
     * Defines whether sort is single-column (default) or multi-column.
     *
     * @public
     * @attr
     */
    get sortMode(): TableSortMode;
    set sortMode(value: TableSortMode);
    /**
     * Gets whether the column editor is open.
     *
     * @public
     * @readonly
     */
    get editorOpened(): boolean;
    /**
     * Gets a `boolean` that indicates the table header is sorted or not.
     * Returns `true` if the table header is sorted, otherwise `false`.
     *
     * @public
     * @readonly
     * @attr
     */
    get sorted(): boolean;
    /**
     * @public
     * @readonly
     */
    get sortedSource(): Array<object>;
    /**
     * Gets whether all columns are currently hidden.
     *
     * @public
     * @readonly
     */
    get allColumnsHidden(): boolean;
    /**
     * @protected
     * @override
     */
    protected updated(changedProperties: Map<PropertyKey, unknown>): void;
    /**
     * @protected
     * @override
     */
    protected onSourceChanged(prev: Array<object>, next: Array<object>): void;
    /**
     * @template
     * @private
     */
    getColumns(): Array<IDataTableColumnDefinition>;
    /**
     * Returns the CSS grid columns layout string based on tracked per-column widths.
     * Falls back to `1fr` for columns without a stored width.
     *
     * @template
     * @private
     */
    getColumnsLayout(): string;
    /**
     * @template
     * @private
     */
    onSortChanged(e: TableSortChangedEvent): void;
    /**
     * Syncs column metadata (hidden, pinned) from the inner table back to column definitions.
     *
     * @template
     * @private
     */
    onColumnsChanged(): void;
    /**
     * Opens the column editor.
     *
     * @public
     */
    openEditor(): void;
    /**
     * Closes the column editor.
     *
     * @public
     */
    closeEditor(): void;
    /**
     * Applies column editor changes back to the column definitions.
     *
     * @private
     * @hidden
     */
    applyColumnEditorChanges(detail: ITableColumnEditorChangedEventDetail): void;
    /**
     * Handles a drop event from header cell drag-and-drop reordering.
     * Reorders column definitions to match the new drop position.
     *
     * @template
     * @private
     */
    handleHeaderCellDrop(event: DropEvent): void;
    /**
     * Snapshots the current column widths from the inner table element and stores them by column key.
     *
     * @private
     */
    private snapshotColumnWidths;
    /**
     * Snapshots column widths from the DOM by querying the inner table.
     *
     * @private
     */
    private snapshotColumnWidthsFromDom;
    /**
     * @private
     */
    private sortByColumn;
    /**
     * Single-sort change handler: applies a single column sort (existing behavior).
     *
     * @private
     */
    private onSingleSortChanged;
    /**
     * Multi-sort change handler: applies a compound sort across all active sort columns.
     *
     * @private
     */
    private onMultiSortChanged;
    /**
     * Sorts data by multiple columns using a comparator chain.
     * Columns are compared in sort-index order (1 = highest priority).
     *
     * @private
     */
    private sortByMultipleColumns;
}
/**
 * @public
 */
export declare namespace DataTableElement {
    type Props = IDataTableElementProps;
}
/**
 * @public
 */
declare global {
    interface HTMLElementTagNameMap {
        'mosaik-data-table': DataTableElement;
    }
}
export {};
//# sourceMappingURL=DataTableElement.d.ts.map