import { VxeTableDefines } from 'vxe-pc-ui/types/components/table';
import { Ref } from 'vue';
import { VxeTableInstance } from 'vxe-pc-ui';
import { ResizeObserverEntry } from '@vueuse/core';
import { ColRecord, RowRecord } from '../utils';
export type ScrollParams = {
    [K in keyof VxeTableDefines.ScrollParams]: VxeTableDefines.ScrollParams[K];
};
export interface ScrollDOMRect {
    type: string;
    scrollTop: number;
    scrollLeft: number;
    scrollHeight: number;
    scrollWidth: number;
    bodyWidth: number;
    bodyHeight: number;
    isX: boolean;
    isY: boolean;
    virtualX?: boolean;
    virtualY?: boolean;
    params: any[];
}
export interface TableWrapperDOMRect {
    target?: Element;
    parent?: Element;
    tbody?: Element;
    parentRect?: DOMRect;
    contentRect?: DOMRect;
    bodyWidth: number;
    bodyHeight: number;
    parentHeight: number;
    parentWidth: number;
    scrollWidth: number;
    scrollHeight: number;
    scrollLeft: number;
    scrollTop: number;
}
export interface TableWrapperOptions {
    scroll?: {
        debounce?: number;
    };
    onTrResizeObserver?: (entries: ReadonlyArray<ResizeObserverEntry>) => void;
    onResizeBodyRowRecord?: (record: RowRecord) => void;
    onResizeBodyColRecord?: (record: ColRecord) => void;
    onTableResizeObserver?: (rect: TableWrapperDOMRect) => void;
    onScroll?: (rect: TableWrapperDOMRect, scroll: any) => void;
}
export declare function useVxeTableObserver(tableRef: Ref<VxeTableInstance | undefined>, options?: TableWrapperOptions): {
    observer: {
        mutation: {
            isSupported: import('vue').ComputedRef<boolean>;
            stop: () => void;
            takeRecords: () => MutationRecord[] | undefined;
        };
        resize: {
            key: symbol;
            isSupported: boolean;
            add: {
                (target: Element, callback?: import('@yanzhen-libs/utils-vue/src/observer/types').TargetObserver["observer"], options?: import('@vueuse/core').UseResizeObserverOptions): import('@yanzhen-libs/utils-vue/src/observer/types').TargetObserver | null | undefined;
                (target: Element[], callback?: import('@yanzhen-libs/utils-vue/src/observer/types').TargetObserver["observer"], options?: import('@vueuse/core').UseResizeObserverOptions): (import('@yanzhen-libs/utils-vue/src/observer/types').TargetObserver | null | undefined)[];
            };
            delete: (target: Element | Element[], callback?: import('@yanzhen-libs/utils-vue/src/observer/types').TargetObserver["observer"]) => import('@yanzhen-libs/utils-vue/src/observer/types').ReturnObserverType<undefined | null>;
            stop: () => void;
        };
        tableResize: {
            isSupported: import('vue').ComputedRef<boolean>;
            stop: () => void;
        };
    };
    tableWrapperRef: import('vue').ComputedRef<never>;
    tableWrapper: import('vue').ComputedRef<TableWrapperDOMRect | {
        target?: Element;
        parent?: Element;
        tbody?: Element;
        parentRect?: {
            height: number;
            width: number;
            x: number;
            y: number;
            readonly bottom: number;
            readonly left: number;
            readonly right: number;
            readonly top: number;
            toJSON: () => any;
        };
        contentRect?: {
            height: number;
            width: number;
            x: number;
            y: number;
            readonly bottom: number;
            readonly left: number;
            readonly right: number;
            readonly top: number;
            toJSON: () => any;
        };
        bodyWidth: number;
        bodyHeight: number;
        parentHeight: number;
        parentWidth: number;
        scrollWidth: number;
        scrollHeight: number;
        scrollLeft: number;
        scrollTop: number;
    }>;
    stop: () => void;
    onTableScroll: (data: ScrollParams) => void;
};
