/**
 * PunchTimingViewer - 打卡计时单元格渲染器
 * 功能：显示时间格式文本（如 00:00:00），支持点击播放/暂停图标切换计时
 *
 * 核心设计：
 *   viewerData 在每次 draw/onClick 时由 Cell.buildViewerData() 重新创建，
 *   因此不能将可变计时状态存储在 data 上。改用 viewer 内部的 Map 来持久化。
 */
import type { CellViewer, ViewerRenderContext, PunchTimingViewerData } from './types';
declare class PunchTimingViewer implements CellViewer<PunchTimingViewerData> {
    readonly type = "punch-timing";
    /**
     * 以 "rowIndex-colIndex" 为 key 持久化计时器状态，
     * 不随 data 对象重建而丢失。
     */
    private readonly timerStates;
    private imageManager;
    constructor();
    /** 绘制单元格内容 */
    draw(context: ViewerRenderContext, data: PunchTimingViewerData): void;
    /** 处理点击事件 */
    onClick(context: ViewerRenderContext, data: PunchTimingViewerData, localX: number, localY: number): boolean;
    /** 获取鼠标悬停时的光标样式 */
    getInteractiveCursor(context: ViewerRenderContext, data: PunchTimingViewerData, localX: number, localY: number): string | null;
    /** 清理所有计时器资源 */
    dispose(): void;
    /** 停止所有正在运行的计时器，重置为暂停状态 */
    stopAllTimers(): void;
    /** 绘制播放/暂停图标 */
    private drawIcon;
    /** 使用离屏 Canvas 对图标着色绘制 */
    private drawTintedImage;
    /** 绘制时间文本 */
    private drawTimeText;
    /** 获取或创建持久化的计时器状态 */
    private getOrCreateState;
    /**
     * 从行数据中的 timer.start_time 同步服务端计时状态
     * 如果服务端标记正在计时（timer.start_time 存在），但本地 state 为 pause，则启动本地计时
     * 如果服务端标记未计时（timer.start_time 不存在），但本地 state 为 start，则停止本地计时
     */
    private syncServerTimerState;
    /** 根据 startTime 计算并更新 currentTime */
    private updateCurrentTime;
    /** 处理开始计时：通过回调进行前置校验和 API 调用，成功后启动本地计时 */
    private handleStartTimer;
    /** 每秒更新显示 */
    private tick;
    /** 安全清除 interval */
    private clearInterval;
    /** 获取要显示的时间文本 */
    private getDisplayText;
}
export default PunchTimingViewer;
