import EE from '@antv/event-emitter';
import { Canvas, FederatedPointerEvent as CanvasEvent, type CanvasConfig } from '@antv/g';
import type { BaseTooltipOperatorMenuOptions, CellEventTarget, EmitterType, Fields, InternalFullyTheme, Pagination, S2CellType, S2DataConfig, S2MountContainer, S2Options, S2RenderOptions, S2Theme, SimpleData, SimplePalette, SortMethod, ThemeCfg, ThemeName, TooltipContentType, TooltipData, TooltipOptions, TooltipShowOptions, Total } from '../common/interface';
import { Store } from '../common/store';
import type { BaseDataSet } from '../data-set';
import type { BaseFacet } from '../facet';
import type { Node } from '../facet/layout/node';
import { RootInteraction } from '../interaction/root';
import { HdAdapter } from '../ui/hd-adapter';
import { StickyHeaderController } from '../ui/sticky-header';
import { BaseTooltip } from '../ui/tooltip';
import type { PivotSheet } from './pivot-sheet';
import type { TableSheet } from './table-sheet';
export declare abstract class SpreadSheet extends EE {
    themeName: ThemeName;
    theme: InternalFullyTheme;
    store: Store;
    dataCfg: S2DataConfig;
    options: S2Options;
    dataSet: BaseDataSet;
    facet: BaseFacet;
    tooltip: BaseTooltip;
    container: Canvas;
    interaction: RootInteraction;
    hdAdapter: HdAdapter;
    stickyHeaderController: StickyHeaderController | null;
    /**
     * 表格是否已销毁
     */
    destroyed: boolean;
    protected abstract bindEvents(): void;
    abstract getDataSet(): BaseDataSet;
    abstract isPivotMode(): this is PivotSheet;
    abstract isTableMode(): this is TableSheet;
    abstract isCustomRowFields(): boolean;
    abstract isHierarchyTreeType(): boolean;
    abstract isHierarchyGridTreeType(): boolean;
    abstract isFrozenRowHeader(): boolean;
    abstract isValueInCols(): boolean;
    protected abstract buildFacet(): void;
    abstract clearDrillDownData(rowNodeId?: string, preventRender?: boolean): Promise<void>;
    abstract groupSortByMethod(sortMethod: SortMethod, meta: Node): Promise<void> | void;
    constructor(dom: S2MountContainer, dataCfg: S2DataConfig, options: S2Options | null);
    protected setupDataConfig(dataCfg: S2DataConfig): void;
    protected setupOptions(options: S2Options | null | undefined): void;
    isCustomHeaderFields(fieldType?: keyof Pick<Fields, 'columns' | 'rows'>): boolean;
    isCustomColumnFields(): boolean;
    private setOverscrollBehavior;
    private restoreOverscrollBehavior;
    private setDebug;
    protected initTheme(): void;
    private getMountContainer;
    private initHdAdapter;
    /**
     * 初始化表头吸顶控制器 (延迟到首次渲染完成后)
     */
    private initStickyHeader;
    protected initInteraction(): void;
    private initTooltip;
    private renderTooltip;
    private getTargetCell;
    /**
     * 展示 Tooltip 提示
     * @alias s2.tooltip.show()
     * @example
        s2.showTooltip({
          position: {
            x: event.clientX,
            y: event.clientY,
          },
          content: '<div>xxx</div>',
          options: {}
        })
     */
    showTooltip<T = TooltipContentType, Menu = BaseTooltipOperatorMenuOptions>(showOptions: TooltipShowOptions<T, Menu>): Promise<void>;
    showTooltipWithInfo(event: CanvasEvent | MouseEvent, cellInfos: TooltipData[], options?: TooltipOptions): Promise<void> | void;
    hideTooltip(): void;
    destroyTooltip(): void;
    registerIcons(): void;
    /**
     * 更新表格数据
     * @param dataCfg 数据源配置
     * @param reset 是否重置数据源配置, 直接使用传入的 dataCfg，不再与之前的配置进行合并
     * @example s2.setDataCfg(dataCfg)
     * @example s2.setDataCfg(dataCfg, true)
     */
    setDataCfg<T extends boolean = false>(dataCfg: T extends true ? S2DataConfig | undefined | null : Partial<S2DataConfig>, reset?: T): void;
    /**
     * 更新表格配置
     * @param options 配置
     * @param reset 是否重置配置, 直接使用传入的 options，不再与之前的配置进行合并
     * @example s2.setOptions(dataCfg)
     * @example s2.setOptions(dataCfg, true)
     */
    setOptions<T extends boolean = false>(options: T extends true ? S2Options | undefined | null : Partial<S2Options>, reset?: T): void;
    /**
     * 同步吸顶控制器状态：options 更新后如果 stickyHeader 配置变更则销毁/重建
     */
    private syncStickyHeader;
    /**
     * 重置表格数据
     * @example s2.resetDataCfg()
     */
    resetDataCfg(): void;
    /**
     * 重置表格配置
     * @example s2.resetOptions()
     */
    resetOptions(): void;
    private resetHiddenColumnsDetailInfoIfNeeded;
    private doRender;
    /**
     * 渲染表格
     * @param reloadData
     * @param options
     * @example
        s2.render(true)
        s2.render(false)
        s2.render({
          reloadData: true;
          rebuildDataSet: true;
          rebuildHiddenColumnsDetail: true;
        })
     */
    render(options?: S2RenderOptions | boolean): Promise<void>;
    private mountSheetInstance;
    private unmountSheetInstance;
    /**
     * 卸载表格
     * @example s2.destroy()
     */
    destroy(): void;
    protected setThemeName(name: ThemeName): void;
    setThemeCfg(themeCfg?: ThemeCfg, getCustomTheme?: (palette: SimplePalette, spreadsheet?: SpreadSheet) => S2Theme): void;
    setTheme(theme: S2Theme): void;
    getTheme(): InternalFullyTheme;
    getThemeName(): "default" | "colorful" | "gray" | "dark";
    /**
     * 更新分页配置
     */
    updatePagination(pagination: Pagination): void;
    /**
     * 修改表格画布大小，不用重新加载数据
     * @param width
     * @param height
     */
    changeSheetSize(width?: number, height?: number): void;
    on<K extends keyof EmitterType>(event: `${K}`, listener: EmitterType[K]): this;
    emit<K extends keyof EmitterType>(event: `${K}`, ...args: Parameters<EmitterType[K]>): void;
    /**
     * 获取 G Canvas 实例
     * @see https://g.antv.antgroup.com/api/renderer/canvas
     */
    getCanvas(): Canvas;
    /**
     * 获取 G Canvas 配置
     * @see https://g.antv.antgroup.com/api/canvas/options
     */
    getCanvasConfig(): Partial<CanvasConfig & {
        supportsCSSTransform?: boolean;
    }>;
    /**
     * 获取 <canvas/> HTML 元素
     */
    getCanvasElement(): HTMLCanvasElement & {
        __s2_instance__: SpreadSheet;
    };
    getLayoutWidthType(): "adaptive" | "colAdaptive" | "compact";
    protected isCellType(cell?: CellEventTarget): boolean;
    getCell<T extends S2CellType = S2CellType>(target: CellEventTarget): T | null;
    getCellType(target: CellEventTarget): import("../common/constant").CellType | undefined;
    /**
     * 获取当前维度对应的汇总配置
     */
    getTotalsConfig(dimension: string): Total;
    /**
     * Create all related groups, contains:
     * 1. container -- base canvas group
     * 2. backgroundGroup
     * 3. panelGroup -- main facet group belongs to
     * 4. foregroundGroup
     * @param dom
     * @private
     */
    protected initContainer(dom: S2MountContainer): void;
    protected setupContainerStyle(): void;
    private initHiddenColumnsDetail;
    private clearCanvasEvent;
    /**
     * 获取文本在画布中的测量信息
     * @param text 待计算的文本
     * @param font 文本 css 样式
     * @returns 文本测量信息 TextMetrics
     */
    measureText: ((text: SimpleData, font: unknown) => TextMetrics | null) & import("lodash").MemoizedFunction;
    /**
     * 计算文本在画布中的宽度
     * @param text 待计算的文本
     * @param font 文本 css 样式
     * @returns 文本宽度
     */
    measureTextWidth: (text: SimpleData, font: unknown) => number;
    /**
     * 计算文本在画布中的宽度 https://developer.mozilla.org/zh-CN/docs/Web/API/TextMetrics
     * @param text 待计算的文本
     * @param font 文本 css 样式
     * @returns 文本高度
     */
    measureTextHeight: (text: SimpleData, font: unknown) => number;
    /**
     * 粗略计算文本在画布中的宽度
     * @param text 待计算的文本
     * @param font 文本 css 样式
     * @returns 文本宽度
     */
    measureTextWidthRoughly: (text: SimpleData, font: unknown) => number;
    updateSortMethodMap(nodeId: string, sortMethod: SortMethod, replace?: boolean): void;
    getMenuDefaultSelectedKeys(nodeId: string): string[];
    handleGroupSort(event: CanvasEvent, meta: Node): void;
    getSeriesNumberText(): string;
    enableAsyncExport(): Error | true;
}
