import { Process } from "./process";
import { Areas, LayoutContext, SubProcessor } from "./layout";
import { Fragment, Fragmentor, FragmentorEvents, FragmentorOptions } from "./fragments";
import { ForcedBreakType } from "./flow";
import { Point } from "./util/ranges";
import { Mutations } from "./mutations";
export declare class Column extends Fragment {
}
export declare class ColumnSpan extends Fragment {
}
declare class ColumnsGroup {
    sequences: HTMLElement[];
    columnParent: HTMLElement;
    span: HTMLElement;
    columnsMut: Mutations;
    spanMut: Mutations;
}
export interface ColumnizatorOptions extends FragmentorOptions {
    parentAreas?: Areas;
    columnCount?: number;
    parentLayoutContext?: LayoutContext;
}
export interface ColumnizatorEvents extends FragmentorEvents {
    'columnization-start': Record<string, never>;
    'columnization-end': Record<string, never>;
}
declare class ColumnsLayoutContext extends LayoutContext {
    maxHeightChanged: boolean;
    constructor(source: HTMLElement, root: HTMLElement, areas: Areas, parentCtx?: LayoutContext);
}
export declare class Columnizator extends Fragmentor<ColumnizatorOptions, ColumnizatorEvents> {
    static defaultOptions: ColumnizatorOptions;
    avoidBreakTypes: string[];
    forcedBreakTypes: ForcedBreakType[];
    layoutContext: ColumnsLayoutContext;
    columnizationMut: Mutations;
    breakPoint: Point | false | null;
    parentAvoidBreakTypes: string[];
    columnCount: number;
    fillProp: string;
    sourceBody: HTMLElement;
    deportFloat: boolean;
    isLastGroup: boolean;
    _maxBottom: number;
    logNoValidBreakPoint: boolean;
    constructor(source: HTMLElement, options?: ColumnizatorOptions);
    /** Returns the max height defined on the element style or Infinity */
    columnsMaxHeight(top: number): number;
    columnizationProcess(): Process;
    /**
     * A the end of this process, the remaining bodies are replaced in the source body
     * @param group
     */
    columnsGroupProcess(group: ColumnsGroup): Process;
    columnSpanProcess(group: ColumnsGroup): Process;
    createLayoutContext(root: HTMLElement, areas: Areas, parentCtx: LayoutContext): LayoutContext;
}
export declare function createColumn(doc: Document, number: number): Column;
export declare const columnsSubProcessor: SubProcessor;
export {};
