import React, { ReactNode } from 'react';
import PropTypes from 'prop-types';
import { TableRowAdapter } from '@douyinfe/semi-foundation/lib/es/table/tableRowFoundation';
import Store from '@douyinfe/semi-foundation/lib/es/utils/Store';
import { BaseRowKeyType } from '@douyinfe/semi-foundation/lib/es/table/foundation';
import BaseComponent from '../../_base/baseComponent';
import { TableContextProps } from '../table-context';
import { ColumnProps, Fixed, TableComponents, Virtualized, ExpandIcon, OnRow, RowExpandable } from '../interface';
export interface BaseRowProps {
    anyColumnFixed?: boolean;
    cellWidths?: number[];
    className?: string;
    columns: ColumnProps[];
    components?: TableComponents;
    disabled?: boolean;
    expandIcon?: ExpandIcon;
    expandableRow?: boolean;
    expanded?: boolean;
    expandedRow?: boolean;
    fixed?: Fixed;
    height?: string | number;
    hideExpandedColumn?: boolean;
    /** Whether the current row is hovered */
    hovered?: boolean;
    indent?: number;
    indentSize?: number;
    index?: number;
    isSection?: boolean;
    level?: number;
    onDidUpdate?: (ref: React.MutableRefObject<any>) => void;
    onHover?: (mouseEnter: boolean, rowKey: string | number) => void;
    onRow?: OnRow<any>;
    onRowClick?: (rowKey: BaseRowKeyType, e: React.MouseEvent, expand: boolean) => void;
    onRowDoubleClick?: (record: Record<string, any>, e: React.MouseEvent) => void;
    onRowMouseEnter?: (record: Record<string, any>, e: React.MouseEvent) => void;
    onRowMouseLeave?: (record: Record<string, any>, e: React.MouseEvent) => void;
    prefixCls?: string;
    record?: Record<string, any>;
    renderExpandIcon?: RenderExpandIcon;
    replaceClassName?: string;
    rowExpandable?: RowExpandable<any>;
    rowKey?: string | number;
    selected?: boolean;
    store?: Store;
    style?: React.CSSProperties;
    virtualized?: Virtualized;
    visible: boolean;
    /** whether display none */
    displayNone?: boolean;
}
/**
 * avoid affected by https://www.npmjs.com/package/babel-plugin-transform-react-remove-prop-types
 */
export declare const baseRowPropTypes: {
    anyColumnFixed: PropTypes.Requireable<boolean>;
    cellWidths: PropTypes.Validator<any[]>;
    className: PropTypes.Requireable<string>;
    columns: PropTypes.Validator<any[]>;
    components: PropTypes.Validator<object>;
    disabled: PropTypes.Requireable<boolean>;
    expandIcon: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike | ((...args: any[]) => any)>>;
    expandableRow: PropTypes.Requireable<boolean>;
    expanded: PropTypes.Requireable<boolean>;
    displayNone: PropTypes.Requireable<boolean>;
    expandedRow: PropTypes.Requireable<boolean>;
    fixed: PropTypes.Requireable<NonNullable<string | boolean>>;
    height: PropTypes.Requireable<NonNullable<string | number>>;
    hideExpandedColumn: PropTypes.Requireable<boolean>;
    hovered: PropTypes.Requireable<boolean>;
    indent: PropTypes.Requireable<number>;
    indentSize: PropTypes.Requireable<number>;
    index: PropTypes.Requireable<number>;
    isSection: PropTypes.Requireable<boolean>;
    level: PropTypes.Requireable<number>;
    onDidUpdate: PropTypes.Requireable<(...args: any[]) => any>;
    onHover: PropTypes.Requireable<(...args: any[]) => any>;
    onRow: PropTypes.Requireable<(...args: any[]) => any>;
    onRowClick: PropTypes.Requireable<(...args: any[]) => any>;
    onRowContextMenu: PropTypes.Requireable<(...args: any[]) => any>;
    onRowDoubleClick: PropTypes.Requireable<(...args: any[]) => any>;
    onRowMouseEnter: PropTypes.Requireable<(...args: any[]) => any>;
    onRowMouseLeave: PropTypes.Requireable<(...args: any[]) => any>;
    prefixCls: PropTypes.Requireable<string>;
    record: PropTypes.Requireable<object>;
    renderExpandIcon: PropTypes.Requireable<(...args: any[]) => any>;
    replaceClassName: PropTypes.Requireable<string>;
    rowExpandable: PropTypes.Requireable<(...args: any[]) => any>;
    rowKey: PropTypes.Validator<NonNullable<NonNullable<string | number>>>;
    selected: PropTypes.Requireable<boolean>;
    store: PropTypes.Requireable<object>;
    style: PropTypes.Requireable<object>;
    virtualized: PropTypes.Requireable<NonNullable<boolean | object>>;
    visible: PropTypes.Validator<boolean>;
};
export default class TableRow extends BaseComponent<BaseRowProps, Record<string, any>> {
    static propTypes: {
        anyColumnFixed: PropTypes.Requireable<boolean>;
        cellWidths: PropTypes.Validator<any[]>;
        className: PropTypes.Requireable<string>;
        columns: PropTypes.Validator<any[]>;
        components: PropTypes.Validator<object>;
        disabled: PropTypes.Requireable<boolean>;
        expandIcon: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike | ((...args: any[]) => any)>>;
        expandableRow: PropTypes.Requireable<boolean>;
        expanded: PropTypes.Requireable<boolean>;
        displayNone: PropTypes.Requireable<boolean>;
        expandedRow: PropTypes.Requireable<boolean>;
        fixed: PropTypes.Requireable<NonNullable<string | boolean>>;
        height: PropTypes.Requireable<NonNullable<string | number>>;
        hideExpandedColumn: PropTypes.Requireable<boolean>;
        hovered: PropTypes.Requireable<boolean>;
        indent: PropTypes.Requireable<number>;
        indentSize: PropTypes.Requireable<number>;
        index: PropTypes.Requireable<number>;
        isSection: PropTypes.Requireable<boolean>;
        level: PropTypes.Requireable<number>;
        onDidUpdate: PropTypes.Requireable<(...args: any[]) => any>;
        onHover: PropTypes.Requireable<(...args: any[]) => any>;
        onRow: PropTypes.Requireable<(...args: any[]) => any>;
        onRowClick: PropTypes.Requireable<(...args: any[]) => any>;
        onRowContextMenu: PropTypes.Requireable<(...args: any[]) => any>;
        onRowDoubleClick: PropTypes.Requireable<(...args: any[]) => any>;
        onRowMouseEnter: PropTypes.Requireable<(...args: any[]) => any>;
        onRowMouseLeave: PropTypes.Requireable<(...args: any[]) => any>;
        prefixCls: PropTypes.Requireable<string>;
        record: PropTypes.Requireable<object>;
        renderExpandIcon: PropTypes.Requireable<(...args: any[]) => any>;
        replaceClassName: PropTypes.Requireable<string>;
        rowExpandable: PropTypes.Requireable<(...args: any[]) => any>;
        rowKey: PropTypes.Validator<NonNullable<NonNullable<string | number>>>;
        selected: PropTypes.Requireable<boolean>;
        store: PropTypes.Requireable<object>;
        style: PropTypes.Requireable<object>;
        virtualized: PropTypes.Requireable<NonNullable<boolean | object>>;
        visible: PropTypes.Validator<boolean>;
    };
    static contextType: React.Context<TableContextProps>;
    static defaultProps: {
        columns: [];
        rowExpandable: {
            (): true;
            (): true;
        };
        components: {
            body: {
                row: string;
                cell: string;
            };
        };
        prefixCls: "semi-table";
        onRow: (...args: any[]) => void;
        onRowClick: (...args: any[]) => void;
        onRowDoubleClick: (...args: any[]) => void;
        onRowMouseEnter: (...args: any[]) => void;
        onRowMouseLeave: (...args: any[]) => void;
        onHover: (...args: any[]) => void;
        onDidUpdate: (...args: any[]) => void;
        visible: boolean;
        hovered: boolean;
        selected: boolean;
        disabled: boolean;
    };
    context: TableContextProps;
    get adapter(): TableRowAdapter<BaseRowProps>;
    constructor(props: BaseRowProps);
    componentDidMount(): void;
    shouldComponentUpdate(nextProps: BaseRowProps): boolean;
    renderExpandIcon: (record: Record<string, any>) => React.ReactNode;
    renderCells(): React.ReactNode[];
    handleMouseEnter: (e: React.MouseEvent) => void;
    handleMouseLeave: (e: React.MouseEvent) => void;
    handleClick: (e: React.MouseEvent) => void;
    render(): React.JSX.Element;
}
export type RenderExpandIcon = (record: Record<string, any>, isNested: boolean) => ReactNode | null;
