import type { SpreadSheet } from '../../sheet-type'; declare enum StickyState { /** 未吸顶 (表格在视口下方或已完全滚出) */ UN_STICKY = "UN_STICKY", /** 完全吸顶 (表头固定在视口顶部) */ STICKY = "STICKY", /** 吸顶边缘 (表格底部即将离开视口, 表头跟随滚出) */ STICKY_EDGE = "STICKY_EDGE" } /** * Window 级别表头吸顶控制器 * * 在 s2-core 层级通过双实例 + DOM 代理包装实现框架无关的表头吸顶功能 * 当表格高度超出页面可视区域时, 表头会自动吸附在视口顶部 */ export declare class StickyHeaderController { private spreadsheet; /** 吸顶表头的 S2 实例 (仅渲染表头) */ private stickyS2; /** 吸顶表头的容器 DOM */ private wrapperElement; /** 吸顶表头 S2 的挂载容器 */ private stickyContainer; private stickyState; /** 解除事件监听的回调集合 */ private disposers; /** 用户配置 */ private options; /** 缓存的滚动容器 */ private scrollContainer; /** 布局同步防回环锁 */ private isSyncing; constructor(spreadsheet: SpreadSheet); getStickyState(): StickyState; private resolveOptions; private init; /** * 创建吸顶表头容器 DOM */ private createDOM; /** * 压缩 S2 数据配置, 仅保留渲染表头的必要数据 * * columns 中指定了列头所使用的维值的 key, 在数据项中对应的值组合起来即为一个列头 * 对于相同列头值的数据, 只保留一项即可 */ private minimizeDataCfg; /** * 生成吸顶表头的 Options * * 当 enableInteraction 为 true 时, 保留 resize/tooltip/headerActionIcons 等配置 * 仅禁用刷选/多选等不适用于表头的交互 */ private applyStickyOptions; /** * 基于主表当前配置, 生成吸顶表头的配置 */ private toStickyConfig; /** * 创建吸顶 S2 实例 * * 核心: 通过 spreadsheet.constructor 创建同类型的 S2 实例 (PivotSheet / TableSheet) * 确保和主表使用相同的渲染逻辑 */ private createStickyS2; /** * 渲染吸顶 S2 并调整到表头大小 */ private renderStickyS2; private getOffsetTop; /** * 沿 DOM 树向上查找最近的**实际正在滚动**的祖先容器 * * 仅当某个祖先同时满足以下两个条件时才返回: * 1. CSS overflow/overflow-y/overflow-x 为 auto | scroll | overlay * 2. scrollHeight > clientHeight (内容确实溢出, 正在产生滚动) * * 这样可以跳过 Ant Tabs 等 overflow:auto 但内容未溢出的容器 */ private getScrollParent; private resolveScrollContainer; private isWindowScroll; /** * 获取主表的位置和尺寸信息 */ private getTableBox; /** * 核心: 计算三态样式并应用到吸顶容器 * * 同时支持 window 滚动和 div 容器滚动两种场景: * - window: 使用 position:fixed, top 为视口偏移 * - div: 使用 position:absolute, top 为相对 S2 容器的偏移 */ private syncStyle; private bindScrollListener; /** * 横向滚动同步: 主表横滑时, 吸顶 S2 的表头跟着同步横滑 * 布局变更同步: 当主表列宽/表格大小变化时, 重新渲染吸顶表头 */ private bindSyncListeners; /** * 交互桥接: 监听副表的语义事件, 转译为主表的等效操作 * * - Resize: 提取 style 应用到主表, 主表 render 后 onLayoutChange 自动同步副表 * - Sort: RANGE_SORT 是命令事件, 主表 facet 内部直接处理 * - Collapse: ROW_CELL_COLLAPSED__PRIVATE 是命令事件, PivotSheet 内部直接处理 */ private bindInteractionBridge; /** * 折叠/展开后滚动到表格顶部 * 折叠操作会大幅改变表格高度, 原位置可能导致用户迷失 */ private scrollToTableTop; destroy(): void; } export {};