import * as _are_visual_virtual_table from '@are-visual/virtual-table';
import { FixedType, ColumnExtra, ColumnType } from '@are-visual/virtual-table';
import { MouseEvent, ReactNode, Key } from 'react';

declare const ExpandRowHeightKey = "ExpandRow";

type TriggerEventHandler<T> = (record: T, event: MouseEvent<HTMLElement>) => void;
interface RenderExpandIconProps<T> {
    prefixCls: string;
    expanded: boolean;
    record: T;
    expandable: boolean;
    onExpand: TriggerEventHandler<T>;
}
type RowClassName<T> = (record: T, index: number, indent: number) => string;
type RenderExpandIcon<T> = (props: RenderExpandIconProps<T>) => ReactNode;
type ExpandedRowRender<T> = (record: T, index: number, indent: number, expanded: boolean) => ReactNode;
interface ExpandableConfig<T> {
    expandedRowKeys?: readonly Key[];
    defaultExpandedRowKeys?: readonly Key[];
    expandedRowRender?: ExpandedRowRender<T>;
    columnTitle?: ReactNode;
    expandRowByClick?: boolean;
    expandIcon?: RenderExpandIcon<T>;
    onExpand?: (expanded: boolean, record: T) => void;
    onExpandedRowsChange?: (expandedKeys: readonly Key[]) => void;
    defaultExpandAllRows?: boolean;
    showExpandColumn?: boolean;
    expandedRowClassName?: string | RowClassName<T>;
    rowExpandable?: (record: T) => boolean;
    columnWidth?: number;
    fixed?: FixedType;
    extraColumnProps?: ColumnExtra;
}

declare const EXPANSION_COLUMN_KEY = "VirtualTable.EXPANSION_COLUMN";
declare function isExpansionColumn<T = any>(column: ColumnType<T>): boolean;
declare const tableExpandable: <T = any>(options?: ExpandableConfig<T> | undefined) => _are_visual_virtual_table.Middleware<T>;

export { EXPANSION_COLUMN_KEY, ExpandRowHeightKey, isExpansionColumn, tableExpandable };
export type { ExpandableConfig, ExpandedRowRender, RenderExpandIcon, RenderExpandIconProps, RowClassName };
