import { DragEndEvent } from '@dnd-kit/core';
import { HTMLAttributes, MouseEvent as ReactMouseEvent, PointerEvent as ReactPointerEvent, ReactNode, Ref } from 'react';
import { TableViewHeader } from '../../model/tableView.types';
import { TableHtmlAttributes, TableRowData, TableSortDirection } from '../../Table.types';
export type HeaderColumn<RowType extends TableRowData = TableRowData> = TableViewHeader<RowType>['columns'][number];
export type TableHeaderSectionProps<RowType extends TableRowData = TableRowData> = {
    header: TableViewHeader<RowType>;
    headerClassName?: string;
    draggableColumnKeys?: string[];
    isAllSelected?: boolean;
    isSomeRowsSelected?: boolean;
    lastResizableColumnKey?: string;
    onColumnDragEnd?: (event: DragEndEvent) => void;
    onColumnResizeReset?: (columnKey: string) => void;
    onColumnResizeStart?: (columnKey: string, event: ReactPointerEvent<HTMLDivElement>) => void;
    onToggleAllSelection?: () => void;
    selectionHeaderContent?: ReactNode;
    showSelectionColumn?: boolean;
    stickyLeftColumnCount?: number;
    stickyRightColumnCount?: number;
    tableHeadRowRef: Ref<HTMLDivElement>;
    onSortChange?: (columnKey: string, direction: TableSortDirection, event: ReactMouseEvent<HTMLButtonElement>) => void;
};
export type SharedHeaderCellProps<RowType extends TableRowData = TableRowData> = {
    column: HeaderColumn<RowType>;
    header: TableViewHeader<RowType>;
    dragActivatorProps?: HTMLAttributes<HTMLSpanElement>;
    dragActivatorRef?: Ref<HTMLSpanElement>;
    htmlAttributes?: TableHtmlAttributes;
    hideWhileDragging?: boolean;
    hasResettableWidth?: boolean;
    isResizable: boolean;
    onColumnResizeReset?: (columnKey: string) => void;
    onColumnResizeStart?: (columnKey: string, event: ReactPointerEvent<HTMLDivElement>) => void;
    onSortChange?: (columnKey: string, direction: TableSortDirection, event: ReactMouseEvent<HTMLButtonElement>) => void;
    showSelectionColumn?: boolean;
    stickyLeftColumnCount?: number;
    stickyRightColumnCount?: number;
};
