///
import type { IGroup } from '@antv/g-canvas';
import { Wheel } from '@antv/g-gesture';
import { type Timer } from 'd3-timer';
import type { GridInfo, LayoutResult, OffsetConfig, S2CellType, SpreadSheetFacetCfg, ViewMeta } from '../common/interface';
import type { S2WheelEvent, ScrollOffset } from '../common/interface/scroll';
import type { SpreadSheet } from '../sheet-type';
import { ScrollBar } from '../ui/scrollbar';
import { type PanelIndexes } from '../utils/indexes';
import { CornerBBox } from './bbox/cornerBBox';
import { PanelBBox } from './bbox/panelBBox';
import { ColHeader, CornerHeader, Frame, RowHeader, SeriesNumberHeader } from './header';
import type { ViewCellHeights } from './layout/interface';
import type { Node } from './layout/node';
export declare abstract class BaseFacet {
spreadsheet: SpreadSheet;
cornerBBox: CornerBBox;
panelBBox: PanelBBox;
backgroundGroup: IGroup;
panelGroup: IGroup;
foregroundGroup: IGroup;
cfg: SpreadSheetFacetCfg;
layoutResult: LayoutResult;
viewCellWidths: number[];
viewCellHeights: ViewCellHeights;
protected mobileWheel: Wheel;
protected timer: Timer;
hScrollBar: ScrollBar;
hRowScrollBar: ScrollBar;
vScrollBar: ScrollBar;
rowHeader: RowHeader;
columnHeader: ColHeader;
cornerHeader: CornerHeader;
rowIndexHeader: SeriesNumberHeader;
centerFrame: Frame;
gridInfo: GridInfo;
protected abstract doLayout(): LayoutResult;
abstract getViewCellHeights(layoutResult: LayoutResult): ViewCellHeights;
protected scrollFrameId: ReturnType;
get scrollBarTheme(): import("../common/interface").ScrollBarTheme;
get scrollBarSize(): number;
protected preCellIndexes: PanelIndexes;
constructor(cfg: SpreadSheetFacetCfg);
hideScrollBar: () => void;
delayHideScrollBar: import("lodash").DebouncedFunc<() => void>;
delayHideScrollbarOnMobile: () => void;
showVerticalScrollBar: () => void;
showHorizontalScrollBar: () => void;
onContainerWheel: () => void;
onContainerWheelForPc: () => void;
onContainerWheelForMobile: () => void;
bindEvents: () => void;
/**
* Start render, call from outside
*/
render(): void;
/**
* 在每次render, 校验scroll offset是否在合法范围中
* 比如在滚动条已经滚动到100%的状态的前提下:( maxAvailableScrollOffsetX = colsHierarchy.width - viewportBBox.width )
* 此时changeSheetSize,sheet从 small width 变为 big width
* 导致后者 viewport 区域更大,其结果就是后者的 maxAvailableScrollOffsetX 更小
* 此时就需要重置 scrollOffsetX,否则就会导致滚动过多,出现空白区域
*/
protected adjustScrollOffset(): void;
getSeriesNumberWidth(): number;
getCanvasHW(): {
width: number;
height: number;
};
getContentHeight(): number;
updateScrollOffset(offsetConfig: OffsetConfig): void;
getPaginationScrollY(): number;
destroy(): void;
setScrollOffset: (scrollOffset: ScrollOffset) => void;
getScrollOffset: () => ScrollOffset;
emitPaginationEvent: () => void;
private unbindEvents;
clipPanelGroup: () => void;
calculateCellWidthHeight: () => void;
/**
* The purpose of this rewrite is to take into account that when rowHeader supports scrollbars
the panel viewable area must vary with the horizontal distance of the scroll
* @param scrollX
* @param scrollY
* @public
*/
calculateXYIndexes(scrollX: number, scrollY: number): PanelIndexes;
getRealScrollX: (scrollX: number, hRowScroll?: number) => number;
protected calculateCornerBBox(): void;
protected calculatePanelBBox: () => void;
getRealWidth: () => number;
getCellRange(): {
start: number;
end: number;
};
getRealHeight: () => number;
clearAllGroup: () => void;
scrollWithAnimation: (offsetConfig: OffsetConfig, duration?: number, cb?: () => void) => void;
scrollImmediately: (offsetConfig: OffsetConfig) => void;
startScroll: (newX: number, newY: number) => void;
getRendererHeight: () => number;
private getAdjustedScrollOffset;
renderRowScrollBar: (rowScrollX: number) => void;
getValidScrollBarOffset: (offset: number, maxOffset: number) => number;
renderHScrollBar: (width: number, realWidth: number, scrollX: number) => void;
private getScrollbarPosition;
renderVScrollBar: (height: number, realHeight: number, scrollY: number) => void;
getScrollBarOffset: (offset: number, scrollbar: ScrollBar) => number;
isScrollOverThePanelArea: ({ layerX, layerY }: Partial) => boolean;
isScrollOverTheCornerArea: ({ layerX, layerY }: Partial) => boolean;
updateHorizontalRowScrollOffset: ({ offset, layerX, layerY }: {
offset: any;
layerX: any;
layerY: any;
}) => void;
updateHorizontalScrollOffset: ({ offset, layerX, layerY }: {
offset: any;
layerX: any;
layerY: any;
}) => void;
isScrollToLeft: (deltaX: number) => boolean;
isScrollToRight: (deltaX: number) => boolean;
isScrollToTop: (deltaY: number) => boolean;
isScrollToBottom: (deltaY: number) => boolean;
isVerticalScrollOverTheViewport: (deltaY: number) => boolean;
isHorizontalScrollOverTheViewport: (deltaX: number) => boolean;
/**
在当前表格滚动分两种情况:
1. 当前表格无滚动条: 无需阻止外部容器滚动
2. 当前表格有滚动条:
- 未滚动到顶部或底部: 当前表格滚动, 阻止外部容器滚动
- 滚动到顶部或底部: 恢复外部容器滚动
*/
isScrollOverTheViewport: (deltaX: number, deltaY: number, layerY: number) => boolean;
cancelScrollFrame: () => boolean;
clearScrollFrameIdOnMobile: () => void;
/**
https://developer.mozilla.org/zh-CN/docs/Web/CSS/overscroll-behavior
阻止外部容器滚动: 表格是虚拟滚动, 这里按照标准模拟浏览器的 [overscroll-behavior] 实现
1. auto => 只有在滚动到表格顶部或底部时才触发外部容器滚动
1. contain => 默认的滚动边界行为不变(“触底”效果或者刷新),但是临近的滚动区域不会被滚动链影响到
2. none => 临近滚动区域不受到滚动链影响,而且默认的滚动到边界的表现也被阻止
所以只要不为 `auto`, 或者表格内, 都需要阻止外部容器滚动
*/
private stopScrollChainingIfNeeded;
private stopScrollChaining;
onWheel: (event: S2WheelEvent) => void;
protected clip(scrollX: number, scrollY: number): void;
/**
* Translate panelGroup, rowHeader, cornerHeader, columnHeader ect
* according to new scroll offset
* @param scrollX
* @param scrollY
* @param hRowScroll
* @protected
*/
protected translateRelatedGroups(scrollX: number, scrollY: number, hRowScroll: number): void;
addCell: (cell: S2CellType) => void;
realCellRender: (scrollX: number, scrollY: number) => void;
protected init(): void;
protected renderBackground(): void;
/**
* Render all scrollbars, default horizontal scrollbar only control viewport
* area(it means not contains row header)
* 1. individual row scrollbar
* 2. horizontal scroll bar(can control whether contains row header)
* 3. vertical scroll bar
*/
protected renderScrollBars(): void;
/**
* Render all headers in {@link #foregroundGroup}, contains:
* 1. row header
* 2. col header
* 3. center frame
* 4. corner header
* 5. series number header
*/
protected renderHeaders(): void;
protected getRowHeader(): RowHeader;
protected getColHeader(): ColHeader;
protected getCornerHeader(): CornerHeader;
protected getSeriesNumberHeader(): SeriesNumberHeader;
protected getCenterFrame(): Frame;
protected getGridInfo: () => {
cols: number[];
rows: any[];
};
drawGrid(): void;
/**
* When scroll behavior happened, only render one time in a period,
* but render immediately in initiate
* @protected
*/
protected dynamicRenderCell(): void;
protected onAfterScroll: import("lodash").DebouncedFunc<() => void>;
protected saveInitColumnLeafNodes(columnNodes?: Node[]): void;
}