import Context from "./Context";
import type DataGrid from "./DataGrid";
import type { HeaderConfig } from "./util";
interface Column extends HeaderConfig {
    [key: string]: any;
}
declare class ColumnHeader extends Context {
    level?: number;
    text: string;
    colspan: number;
    rowspan?: number;
    required: boolean | null;
    index: number;
    colType?: string;
    parentKey?: string;
    nestedKey?: string;
    nestedChildOffset: number;
    colId: string;
    colKey: string;
    uniqueColKey: string;
    color?: string;
    isTapdRelated: boolean;
    isIomc: boolean;
    fieldHint: string;
    fieldHintIconBounds: {
        x: number;
        y: number;
        width: number;
        height: number;
    } | null;
    isLink: boolean;
    linkKey?: string;
    linkTask?: string;
    linkIconBounds: {
        x: number;
        y: number;
        width: number;
        height: number;
    } | null;
    convertMeta: string;
    sortDisabled: boolean;
    showFilterIcon: boolean | undefined;
    filterIconActive: boolean | undefined;
    constructor(grid: DataGrid, index: number, x: number, y: number, width: number, height: number, column: Column);
    isVisibleOnScreen(): boolean;
    draw(): void;
    /**
     * Invalidate fieldHintIconBounds / linkIconBounds hit-boxes if the icon is visually
     * covered by the given mask rectangle (which covers the sort/filter icon area) by >= 50%.
     *
     * Background: when the column width is narrow, the sort/filter icon mask paints over
     * the fieldHint info icon and/or link icon (both drawn earlier in the same draw pass).
     * The icon is no longer visible to the user, so hover interaction must not trigger the
     * associated popper/tooltip. By zeroing the bounds here, the hover hit-testing in
     * Events.ts naturally short-circuits (`if (... && xxxIconBounds)`).
     *
     * Threshold: 50% area coverage. Partial occlusion below 50% keeps the bounds active,
     * matching user expectation that a mostly-visible icon remains interactive.
     *
     * Mask rectangle spans full header height (this.y, this.height), so only horizontal
     * overlap matters in practice, but we compute 2D overlap for correctness.
     */
    private _invalidateBoundsIfMasked;
    /**
     * Check if this nested-child column is the last child of its parent nested column.
     * Compares right edge of this child with right edge of the parent header.
     */
    private _isLastNestedChild;
    /**
     * Check if this column header's right edge is shared with another nested column's left edge.
     * Used to split the shared border into two 1px lines with different colors.
     */
    private _isRightEdgeSharedWithNestedColumn;
    /**
     * Check if this column header's left edge is shared with another nested column's right edge.
     * Used to split the shared border into two 1px lines with different colors.
     */
    private _isLeftEdgeSharedWithNestedColumn;
}
export default ColumnHeader;
