e-virt-table
Version:
A powerful data table based on canvas. You can use it as data grid、Microsoft Excel or Google sheets. It supports virtual scroll、cell edit etc.
56 lines (55 loc) • 1.99 kB
TypeScript
import type Cell from './Cell';
import type CellHeader from './CellHeader';
export type ViewportRect = {
x: number;
y: number;
left: number;
top: number;
right: number;
bottom: number;
width: number;
height: number;
};
/** 内容缩放:逻辑坐标 ↔ 物理像素,canvas / DOM 共用 */
export default class ZoomScale {
value: number;
get isDefault(): boolean;
clamp(value: number, min: number, max: number): number;
/** @returns 是否发生变化 */
set(value: number, min: number, max: number): boolean;
/** 逻辑 -> 物理 */
toVisual(logical: number): number;
/** 物理 -> 逻辑 */
toLogical(physical: number): number;
toPx(logical: number): string;
/** DOM 测量高度 -> 逻辑高度 */
domHeightToLogical(physicalHeight: number): number;
/** 逻辑内容尺寸 -> 物理尺寸 */
contentToPhysical(logical: number): number;
scaleStyle<T extends Record<string, any>>(style: T): T;
assignScaledStyle(el: HTMLElement, style: Record<string, any>): void;
/** 容器物理宽度 -> 逻辑可视宽度 */
containerWidth(containerPhysicalWidth: number): number;
resolveStageWidth(options: {
containerPhysicalWidth: number;
contentWidth: number;
scrollerTrackSize: number;
fillContainer: boolean;
}): {
stageWidth: number;
stagePhysicalWidth: number;
};
applyStageHeight(stageElement: HTMLDivElement, physicalHeight: number): {
stageHeight: number;
stagePhysicalHeight: number;
};
/** floating-ui 锚点:逻辑单元格 -> 视口物理矩形 */
getViewportRect(logical: {
x: number;
y: number;
width: number;
height: number;
}, containerRect: DOMRect): ViewportRect;
/** overlayer 单元格:外层物理定位 + 内层 zoom 缩放自定义 render */
createOverlayerCellElement(cell: Cell | CellHeader, cssPrefix: string): HTMLDivElement;
}