import type { Cell, CellValueType } from "./cell.js";
import type { Worksheet } from "./worksheet.js";
import type { Style, NumFmt, Font, Alignment, Protection, Borders, Fill, CellValue } from "./types.js";
/** Header value type - can be a single value or array for multi-row headers */
export type ColumnHeaderValue = CellValue | CellValue[];
export interface ColumnDefn {
    /** Column header value(s). Can be string, Date, number, or any CellValue type */
    header?: ColumnHeaderValue;
    key?: string;
    width?: number;
    outlineLevel?: number;
    hidden?: boolean;
    style?: Partial<Style>;
    /** Whether the column width is auto-fitted to content */
    bestFit?: boolean;
}
export interface ColumnModel {
    min: number;
    max: number;
    width?: number;
    style?: Partial<Style>;
    isCustomWidth?: boolean;
    hidden?: boolean;
    outlineLevel?: number;
    collapsed?: boolean;
    bestFit?: boolean;
}
/**
 * Column defines the column properties for 1 column.
 * This includes header rows, widths, key, (style), etc.
 * Worksheet will condense the columns as appropriate during serialization
 */
declare class Column {
    private _worksheet;
    private _number;
    private _header;
    private _key;
    /** The width of the column */
    width?: number;
    private _hidden;
    private _outlineLevel;
    /** Whether the column width is auto-fitted to content */
    bestFit?: boolean;
    /** Styles applied to the column */
    style: Partial<Style>;
    constructor(worksheet: Worksheet, number: number, defn?: ColumnDefn | false);
    get number(): number;
    get worksheet(): Worksheet;
    /**
     * Column letter key
     */
    get letter(): string;
    get isCustomWidth(): boolean;
    get defn(): ColumnDefn;
    set defn(value: ColumnDefn | undefined);
    /**
     * Get header values as an array (for multi-row header support)
     */
    get headers(): CellValue[];
    /**
     * Can be a single value or an array for multi-row headers.
     * Supports any CellValue type including Date, number, string, etc.
     */
    get header(): ColumnHeaderValue | undefined;
    set header(value: ColumnHeaderValue | undefined);
    /**
     * The name of the properties associated with this column in each row
     */
    get key(): string | undefined;
    set key(value: string | undefined);
    /**
     * Hides the column
     */
    get hidden(): boolean;
    set hidden(value: boolean);
    /**
     * Set an outline level for columns
     */
    get outlineLevel(): number;
    set outlineLevel(value: number | undefined);
    /**
     * Indicate the collapsed state based on outlineLevel
     */
    get collapsed(): boolean;
    toString(): string;
    equivalentTo(other: Column): boolean;
    equivalentToModel(model: ColumnModel): boolean;
    get isDefault(): boolean;
    get headerCount(): number;
    /**
     * Iterate over all current cells in this column
     */
    eachCell(callback: (cell: Cell, rowNumber: number) => void): void;
    /**
     * Iterate over all current cells in this column including empty cells
     */
    eachCell(opt: {
        includeEmpty?: boolean;
    }, callback: (cell: Cell, rowNumber: number) => void): void;
    /**
     * The cell values in the column
     */
    get values(): CellValueType[];
    set values(v: CellValueType[]);
    /**
     * Add a page break after this column.
     * @param top - Optional top row limit for the page break (1-indexed)
     * @param bottom - Optional bottom row limit for the page break (1-indexed)
     */
    addPageBreak(top?: number, bottom?: number): void;
    get numFmt(): string | NumFmt | undefined;
    set numFmt(value: string | undefined);
    get font(): Partial<Font> | undefined;
    set font(value: Partial<Font> | undefined);
    get alignment(): Partial<Alignment> | undefined;
    set alignment(value: Partial<Alignment> | undefined);
    get protection(): Partial<Protection> | undefined;
    set protection(value: Partial<Protection> | undefined);
    get border(): Partial<Borders> | undefined;
    set border(value: Partial<Borders> | undefined);
    get fill(): Fill | undefined;
    set fill(value: Fill | undefined);
    static toModel(columns: Column[]): ColumnModel[] | undefined;
    static fromModel(cols: ColumnModel[]): Column[] | null;
    static fromModel(worksheet: Worksheet, cols: ColumnModel[]): Column[] | null;
}
export { Column };
