/**
 * This file is part of the drip-table project.
 * @link     : https://drip-table.jd.com/
 * @author   : Emil Zhai (root@derzh.com)
 * @modifier : Emil Zhai (root@derzh.com)
 * @copyright: Copyright (c) 2021 JD Network Technology Co., Ltd.
 */
import React from 'react';
import type { SetStateAction } from "./utils/hooks";
import type { DripTableExtraOptions, DripTableProps, DripTableRecordTypeBase, DripTableRecordTypeWithSubtable, DripTableTableInformation, ExtractDripTableExtraOption } from "./types";
import { FinalizeString } from './components/cell-components/utils';
import type { SandboxCreateEvaluator, SandboxEvaluate, SandboxSafeEvaluate } from './utils/sandbox';
export interface IDripTableContext<RecordType extends DripTableRecordTypeWithSubtable<DripTableRecordTypeBase, ExtractDripTableExtraOption<ExtraOptions, 'SubtableDataSourceKey'>> = DripTableRecordTypeWithSubtable<DripTableRecordTypeBase, never>, ExtraOptions extends Partial<DripTableExtraOptions> = never> {
    /**
     * 表格属性
     */
    props: DripTableProps<RecordType, ExtraOptions>;
    /**
     * 表格基本信息
     */
    info: DripTableTableInformation<RecordType, ExtraOptions>;
    /**
     * 表格状态
     */
    state: {
        loading: boolean;
        api: CallableFunction | CallableFunction[] | null;
        tab: number;
        extraData: null;
        pendingChanging: boolean;
        pagination: {
            current: number;
            total: number;
            pageSize: number;
        };
        paginationChanged: boolean;
        sorter: {
            key: string | null;
            direction: 'ascend' | 'descend' | null;
            comparer: ((a: RecordType, b: RecordType) => number) | null;
        };
        sorterChanged: boolean;
        filters: Record<string, (boolean | React.Key)[] | null>;
        filtersChanged: boolean;
        tableSize: 'default';
        layout: 'table' | 'card' | 'calendar';
        checkPassed: boolean;
        selectedRowKeys: React.Key[];
        displayColumnKeys: React.Key[];
    };
    /**
     * 设置表格状态
     */
    setState: (state: SetStateAction<IDripTableContext['state']>) => void;
    /**
     * 创建沙箱函数
     */
    createEvaluator: SandboxCreateEvaluator;
    /**
     * 沙箱函数执行器
     */
    evaluate: SandboxEvaluate;
    /**
     * 安全的沙箱函数执行器
     */
    safeEvaluate: SandboxSafeEvaluate;
    /**
     * 格式化模板字符串
     */
    finalizeString: FinalizeString;
}
export declare const createTableState: () => IDripTableContext['state'];
export declare const DripTableContext: React.Context<IDripTableContext<DripTableRecordTypeWithSubtable<DripTableRecordTypeBase, never>, never>>;
export declare const useTableContext: <RecordType extends DripTableRecordTypeWithSubtable<DripTableRecordTypeBase, ExtractDripTableExtraOption<ExtraOptions, "SubtableDataSourceKey">> = DripTableRecordTypeWithSubtable<DripTableRecordTypeBase, never>, ExtraOptions extends Partial<DripTableExtraOptions> = never>() => IDripTableContext<RecordType, ExtraOptions>;
