import React from 'react';
import { ScopedContext } from 'jamis-core';
import Sortable from 'sortablejs';
import type { ActionObject, IScopedContext, SchemaNode } from 'jamis-core';
import type { BackTopRef, ExportExcelToolbar, HeaderCellRenderProps, IColumn, IRow, ITableStore, RenderCellProps, SummaryRow, TableProps } from '../types';
export declare class TableCmpt extends React.Component<TableProps, object> {
    static contextType: React.Context<IScopedContext<import("jamis-core").ScopedComponentType>>;
    context: React.ContextType<typeof ScopedContext>;
    static propsList: Array<string>;
    static defaultProps: Partial<TableProps>;
    table?: HTMLTableElement;
    backTop: BackTopRef['current'];
    sortable?: Sortable;
    dragTip?: HTMLElement;
    affixedTable?: HTMLTableElement;
    parentNode?: HTMLElement | Window;
    totalWidth: number;
    totalHeight: number;
    outterWidth: number;
    outterHeight: number;
    unSensor?: Function;
    toDispose: Array<() => void>;
    updateTableInfoLazy: import("lodash").DebouncedFuncLeading<any>;
    widths: {
        [propName: string]: number;
    };
    widths2: {
        [propName: string]: number;
    };
    heights: {
        [propName: string]: number;
    };
    renderedToolbars: Array<string>;
    subForms: any;
    timer: ReturnType<typeof setTimeout>;
    tableFixed: boolean;
    constructor(props: TableProps, context: IScopedContext);
    static syncRows(store: ITableStore, props: TableProps, prevProps?: TableProps): boolean;
    componentDidMount(): void;
    /**
     * 自动设置表格高度占满界面剩余区域
     * 用 css 实现有点麻烦，要改很多结构，所以先用 dom hack 了，避免对之前的功能有影响
     */
    updateAutoFillHeight(): void;
    componentDidUpdate(prevProps: TableProps): void;
    componentWillUnmount(): void;
    subFormRef(form: any, x: number, y: number): void;
    handleAction(e: React.UIEvent<any> | undefined, action: ActionObject, ctx: object): void;
    handleCheck: (item: IRow, checked: boolean, shift?: boolean) => Promise<void>;
    handleRowClick: (item: IRow, index: number, restArgs: {
        clientX: number;
        clientY: number;
    }) => Promise<void | import("jamis-core").RendererEvent<any, any>>;
    handleRowMouseUp: (item: IRow, index: number, restArgs: {
        clientX: number;
        clientY: number;
    }) => Promise<void | import("jamis-core").RendererEvent<any, any>>;
    handleRowDbClick: (item: IRow, index: number, restArgs: {
        clientX: number;
        clientY: number;
    }) => Promise<void | import("jamis-core").RendererEvent<any, any>>;
    handleRowMouseEnter: import("lodash").DebouncedFuncLeading<(item: IRow, index: number) => Promise<void | import("jamis-core").RendererEvent<any, any>>>;
    handleRowMouseLeave: import("lodash").DebouncedFuncLeading<(item: IRow, index: number) => Promise<void | import("jamis-core").RendererEvent<any, any>>>;
    handleCheckAll(): Promise<void>;
    handleQuickChange(item: IRow, values: object, saveImmediately?: boolean | any, savePristine?: boolean, options?: {
        resetOnFailed?: boolean;
        reload?: string;
    }): void;
    handleSave(): Promise<void>;
    handleSaveOrder(): Promise<void>;
    syncSelected(): void;
    reset(): void;
    bulkUpdate(value: any, items: Array<object>): void;
    getSelected(): any[];
    affixDetect(): void;
    updateTableInfo(): void;
    handleOutterScroll(): void;
    tableRef(ref: HTMLTableElement): void;
    dragTipRef(ref: any): void;
    affixedTableRef(ref: HTMLTableElement): void;
    initDragging(): void;
    destroyDragging(): void;
    getPopOverContainer: () => Element | Text | null;
    handleMouseMove: (e: React.MouseEvent<any>) => void;
    handleMouseLeave(): void;
    draggingTr: HTMLTableRowElement;
    originIndex: number;
    draggingSibling: Array<HTMLTableRowElement>;
    handleDragStart(e: React.DragEvent): void;
    handleDragOver(e: any): void;
    handleDrop(): Promise<void>;
    handleDragEnd(): void;
    handleImageEnlarge(info: any, target: {
        rowIndex: number;
        colIndex: number;
    }): void;
    resizeLine: HTMLElement;
    resizeLineLeft: number;
    targetTh: HTMLElement;
    targetThWidth: number;
    lineStartX: number;
    handleColResizeMouseDown(e: React.MouseEvent<HTMLElement>): void;
    handleColResizeMouseMove(e: MouseEvent): void;
    handleColResizeMouseUp(e: MouseEvent): void;
    handleColumnToggle(columns: Array<IColumn>): void;
    doAction(action: ActionObject, args: any, throwErrors: boolean): any;
    renderAutoFilterForm(): React.ReactNode;
    renderHeading(): JSX.Element | null;
    /**
     * 执行onQuery, 并异步将content区域的scrollTop重置
     */
    handleQueryWithResetScroll: (values: any) => void;
    handleSort: (column: IColumn) => Promise<void>;
    /**
     * 封装一层使用props.data来作为数据域以解析表达式
     */
    resolveVariable: (expr: string) => any;
    /**
     * 渲染表格头部列的前缀元素
     */
    renderHeaderCellAffix: (column: IColumn | (() => JSX.Element | null)) => JSX.Element;
    renderHeadCell: (column: IColumn | (() => JSX.Element | null), cellProps: HeaderCellRenderProps) => JSX.Element;
    renderCell: (region: "placeholder" | string, column: IColumn | (() => JSX.Element | null), row: IRow, cellProps: RenderCellProps, ignoreDrag?: boolean) => JSX.Element;
    renderAffixHeader(tableClassName: string): JSX.Element | null;
    renderToolbar(toolbar: SchemaNode): JSX.Element | null | undefined;
    renderColumnsToggler(config?: any): JSX.Element | null;
    renderDragToggler(): JSX.Element | null;
    renderExportExcel(toolbar: ExportExcelToolbar): JSX.Element | null;
    renderActions(region: string): JSX.Element | null;
    renderHeader(editable?: boolean): JSX.Element | JSX.Element[] | null;
    renderFooter(): JSX.Element | JSX.Element[] | null;
    generateRowKey: (row: IRow, rowKeyGenerator?: string) => any;
    renderRows(rows?: IRow[], columns?: IColumn[], rowProps?: {
        parent?: any;
        regionPrefix?: string;
        ignoreFootableContent?: boolean;
        renderCell?: TableCmpt['renderCell'];
    }): any[];
    renderItemActions: () => JSX.Element | null;
    renderSummaryRow: (position: "prefix" | "affix", items?: Array<any>, rowIndex?: number) => JSX.Element | null;
    renderSummaryRows: (position: "prefix" | "affix", summaryRow?: SummaryRow) => JSX.Element | (JSX.Element | null)[] | null;
    renderTableContent(tableClassName: string): JSX.Element;
    render(): JSX.Element;
}
export declare class TableRenderer extends TableCmpt {
    receive(values: any, subPath?: string): void;
    reload(subPath?: string, query?: any, ctx?: any): void;
}
