import Context from "./Context";
import Validator from "./Validator";
import NestedGrid from "./NestedGrid";
import type DataGrid from "./DataGrid";
import type { ColumnConfig } from "./types";
import { type CellViewerData, type ViewerRenderContext } from "./viewers";
interface Column extends ColumnConfig {
    [key: string]: any;
}
interface RowData {
    [key: string]: any;
}
interface CellOptions {
    [key: string]: any;
}
declare class Cell extends Context {
    colIndex: number;
    rowIndex: number;
    rowData: RowData;
    title: string;
    key: string;
    labelKey?: string;
    readonly?: boolean;
    textAlign: string;
    textBaseline: string;
    dataType: string;
    options?: any[];
    render?: (value: any) => any;
    value: any;
    label: string;
    originalValue: any;
    validator: Validator;
    valid: boolean;
    message: string | null;
    color?: string;
    borderColor?: string;
    fillColor?: string;
    borderWidth?: number;
    nestedGrid?: NestedGrid;
    /** @internal 是否有嵌套数据待创建（Body.tryAdoptNestedGrids 需要访问） */
    hasNestedData: boolean;
    /** @internal 嵌套配置（Body.tryAdoptNestedGrids 需要访问） */
    nestedConfig?: any;
    /** @internal 嵌套列配置（Body.updateRowByIndex 需要访问） */
    nestedColumns?: any[];
    viewerType?: string;
    viewerData?: CellViewerData;
    useViewer?: boolean;
    viewerConfig?: Record<string, any>;
    isLink?: boolean;
    constructor(value: any, label: any, grid: DataGrid, colIndex: number, rowIndex: number, x: number, y: number, width: number, height: number, column: Column, rowData: RowData, options?: CellOptions);
    /**
     * Extract viewer-specific config from column
     * This extracts properties that are specific to viewers
     */
    private extractViewerConfig;
    /**
     * 性能优化：延迟创建 NestedGrid
     * 仅在首次绘制时创建，避免构造函数中的大量对象创建
     */
    private createNestedGridLazy;
    /**
     * 性能优化：从旧 Cell 迁移已有的 NestedGrid 实例（避免重建）。
     *
     * 当 Body.paint() 重建 Row/Cell 时，如果嵌套数据未变化，
     * 可以通过此方法直接复用旧 Cell 的 NestedGrid 实例，跳过重建。
     *
     * @param oldNestedGrid 旧 Cell 上的 NestedGrid 实例
     * @param dataChanged 嵌套数据是否发生了变化（如果变化了，需要 updateData）
     */
    adoptNestedGrid(oldNestedGrid: NestedGrid, dataChanged: boolean): void;
    /**
     * Build viewer data from cell properties
     */
    buildViewerData(): CellViewerData;
    /**
     * Build render context for viewer
     */
    buildRenderContext(x: number, y: number, cellFillColor: string): ViewerRenderContext;
    /**
     * Draw cell content using Viewer system
     */
    private drawWithViewer;
    /**
     * Draw default cell content (backward compatible)
     */
    private drawDefaultContent;
    isInHorizontalAutofill(mouseX: number, _mouseY: number): boolean;
    isInsideFixedHorizontalAutofill(mouseX: number, _mouseY: number): boolean;
    validate(data?: RowData): Promise<void>;
    resetValidate(flag?: boolean, message?: string | null): void;
    handleNumber(val: any): number | null | any;
    /**
     * @param data 需要设置的值
     * @param ignore 是否忽略readonly属性可以修改
     */
    setData(data: any, ignore?: boolean): void;
    setLabel(val: any): void;
    getMapValue(label: any): any;
    getMapLabel(value: any): any;
    /**
     * 绘制 loading 图标（旋转的蓝色圆弧/图片）
     * 图标显示在单元格右侧，尺寸 14x14，带背景遮盖
     */
    private drawLoadingIndicator;
    draw(): void;
    /**
     * 计算 text-with-switcher viewer 右侧图标（downstream/totalNum/error）占用的宽度
     * 编辑笔需要向左偏移以避免覆盖这些图标
     */
    private getEditIconRightReserved;
    /**
     * 重写父类的 isInsideEditIcon，加入 text-with-switcher viewer 的 rightReserved 偏移
     * 使点击检测区域与 draw() 中编辑笔的实际绘制位置一致
     */
    isInsideEditIcon(mouseX: number, mouseY: number): boolean;
    /**
     * 获取 cell 的 error 信息（来自 viewerData.error 或 rowData.errorInfos）
     * @returns error 对象或 null
     */
    getCellError(): {
        errorProperty?: string;
        errorMessage?: string;
        is_warning?: boolean;
        is_level_1_error?: boolean;
    } | null;
    /**
     * 获取 cell 的 reminder 信息（来自 rowData.remindInfos）
     * @returns remind 对象或 null
     */
    getCellReminder(): {
        field_name: string;
        is_filed_admin?: boolean;
        fcr_open_time?: string;
        color?: string;
        [key: string]: any;
    } | null;
    /**
     * 判断鼠标坐标是否在蓝色提醒三角区域内（右上角 18x18 三角形）
     * 三角区域为：(right-18, top), (right, top), (right, top+18) 构成的直角三角形
     * @param mouseX 鼠标在 canvas 上的 x 坐标（已经过 scrollX 修正的坐标）
     * @param mouseY 鼠标在 canvas 上的 y 坐标（已经过 scrollY 修正的坐标）
     * @param cellX 单元格左上角 x（已含 scroll/fixed 偏移）
     * @param cellY 单元格左上角 y（已含 scroll 偏移）
     */
    isInsideReminderTriangle(mouseX: number, mouseY: number, cellX: number, cellY: number): boolean;
}
export default Cell;
