import type { PropType, ExtractPropTypes, ComponentInternalInstance, InjectionKey, Ref, ComputedRef, CSSProperties, ToRefs } from 'vue';
import { TableStore } from './store/store-types';
export type TableSize = 'sm' | 'md' | 'lg';
export type BorderType = '' | 'bordered' | 'borderless';
export type RowKeyType = string | ((v: Record<string, unknown>, index?: number | undefined) => string);
export type SpanMethod = (data: {
    row: unknown;
    column: unknown;
    rowIndex: number;
    columnIndex: number;
}) => number[] | {
    rowspan: number;
    colspan: number;
};
export declare const tableProps: {
    data: {
        type: PropType<Record<string, unknown>[]>;
        default: never[];
    };
    striped: {
        type: BooleanConstructor;
        default: boolean;
    };
    scrollable: {
        type: BooleanConstructor;
        default: boolean;
    };
    maxWidth: {
        type: StringConstructor;
    };
    maxHeight: {
        type: StringConstructor;
    };
    tableWidth: {
        type: StringConstructor;
    };
    tableHeight: {
        type: StringConstructor;
    };
    size: {
        type: PropType<TableSize>;
        validator(value: string): boolean;
        default: string;
    };
    rowHoveredHighlight: {
        type: BooleanConstructor;
        default: boolean;
    };
    fixHeader: {
        type: BooleanConstructor;
        default: boolean;
    };
    checkable: {
        type: BooleanConstructor;
        default: boolean;
    };
    tableLayout: {
        type: PropType<"fixed" | "auto">;
        default: string;
        validator(v: string): boolean;
    };
    showLoading: {
        type: BooleanConstructor;
        default: boolean;
    };
    headerBg: {
        type: BooleanConstructor;
        default: boolean;
    };
    spanMethod: {
        type: PropType<SpanMethod>;
    };
    borderType: {
        type: PropType<BorderType>;
        default: string;
    };
    empty: {
        type: StringConstructor;
        default: string;
    };
    showHeader: {
        type: BooleanConstructor;
        default: boolean;
    };
    rowKey: {
        type: (StringConstructor | (new (...args: any[]) => (v: Record<string, unknown>, index?: number | undefined) => string) | (() => (v: Record<string, unknown>, index?: number | undefined) => string) | (((new (...args: any[]) => (v: Record<string, unknown>, index?: number | undefined) => string) | (() => (v: Record<string, unknown>, index?: number | undefined) => string) | {
            (): (v: Record<string, unknown>, index?: number | undefined) => string;
            new (): any;
            readonly prototype: any;
        }) | null)[])[];
        default: string;
    };
    defaultExpandAll: {
        type: BooleanConstructor;
        default: boolean;
    };
    expandRowKeys: {
        type: PropType<string[]>;
    };
    indent: {
        type: NumberConstructor;
        default: number;
    };
    lazy: {
        type: BooleanConstructor;
        default: boolean;
    };
};
export type TableProps = ExtractPropTypes<typeof tableProps>;
export type DefaultRow = TableProps['data'][number];
export interface ITable<T = DefaultRow> extends ComponentInternalInstance {
    store: TableStore<T>;
    props: TableProps;
    tableId: string;
    hiddenColumns: Ref<HTMLElement | null>;
    tableRef: Ref<HTMLElement>;
    updateColumnWidth: () => void;
}
export interface TableMethods<T = Record<string, unknown>> {
    getCheckedRows(): T[];
}
export declare const TABLE_TOKEN: InjectionKey<ITable>;
export interface UseTable {
    classes: ComputedRef<Record<string, boolean>>;
    styles: ComputedRef<CSSProperties>;
}
export type UseFixedColumn = ToRefs<{
    stickyClass: ComputedRef<Record<string, boolean>>;
    stickyStyle: ComputedRef<CSSProperties>;
}>;
export interface UseTableLayout {
    tableWidth: Ref;
    updateColumnWidth: () => void;
}
export type ITableInstanceAndDefaultRow = ComponentInternalInstance & ITable<DefaultRow>;
