import { Node } from './node'; import { Root } from './root'; import { StatefulEventBus } from './stateful-event-bus'; export interface SectionProps { /** 分组的唯一标识 */ id: string; /** 分组的列数 */ col: number; /** 分组的顺序 */ order: number; /** 节点数量 */ count: number; /** 该分组的行间距 */ rowGap: number; /** 该分组的列间距 */ columnGap: number; } /** * 分组状态 */ type SectionState = { /** * 分组是否已经布局计算 */ layouted: boolean; /** * 分组顶部距离容器顶部的距离 */ scrollTop: number; /** * 分组的高度 */ height: number; /** * 每个列的渲染范围 * 每个元素为一个二元组,第一个元素为起始索引,第二个元素为结束索引 */ renderRange: [number, number][]; }; export declare const SectionEvents: { AllNodesLayouted: symbol; Resize: symbol; }; export declare class Section extends StatefulEventBus { root: Root; id: string; order: number; col: number; columnMap: Node[][]; nodes: Map; defaultSize: number; count: number; rowGap: number; columnGap: number; layoutedSignal: { promise: Promise; resolve: () => void; reject: (reason?: any) => void; }; constructor(root: Root, props: SectionProps); /** * 订阅事件 */ private setupSubscriptions; /** * 获取当前分组的最大高度,分组的最大高度由分组最高列决定 * @returns 当前分组的最大高度 */ get maxColumnHeight(): number; /** * 当前分组是否在可视区域 * * 滚动偏移为 scrollOffset,容器的高度为 containerSize.height * * 当前容器滚动上边界(scrollBoundaryStart)为 scrollOffset,容器滚动的下边界(scrollBoundaryEnd)为 scrollOffset + containerSize.height * * 如果分组的 scrollTop 小于滚动下边界并且 scrollTop + 分组高度大于滚动上边界,那么分组在可视区域 */ get isInRange(): boolean; /** * 注册节点 */ private register; /** * 初始化分组内的列,即将一维数组转二维数组 */ private initializeColumnMap; /** * 更新当前分组之后的分组的位置信息 */ private updateBehindSectionsPosition; /** * 更新指定列的节点位置信息 * @param col 列索引 */ private updateColumnNode; /** * 更新每列节点的位置 */ private updateNodes; /** * 计算当前分组的 scrollTop,即该分组之前的所有分组的最大列高度之和 */ private calcScrollTop; /** * 计算当前分组内每列应该渲染的节点索引区间 */ getNodeRenderRange(): [number, number][]; pushNode(nodeIndex: number, col: number): void; pushNodes(count: number): void; } export {};