import { Layout, Vtree } from "./types";
/**
 * Enable page/column breaking using the browser's multi-column feature.
 * This function sets CSS properties on the column element to create a
 * single-column (column-count: 1) that splits into multiple columns
 * when content overflows the column's size. The large column gap
 * (column-gap) ensures that the browser creates new columns
 * apart from the original column position, and it helps determine
 * page/column breaking positions in our layout processing.
 */
export declare function setBrowserColumnBreaking(column: Vtree.Container): void;
/**
 * Disable the browser's multi-column feature for page/column breaking.
 * This function resets the CSS properties set by `setBrowserColumnBreaking`.
 */
export declare function unsetBrowserColumnBreaking(column: Vtree.Container): void;
/**
 * Check if the browser's multi-column feature is being used for page/column breaking.
 */
export declare function isUsingBrowserColumnBreaking(column: Vtree.Container): boolean;
/**
 * Mark the column as a root column for Vivliostyle layout processing.
 */
export declare function setAsRootColumn(column: Vtree.Container): void;
/**
 * Check if the column is marked as a root column for Vivliostyle layout processing.
 */
export declare function isRootColumn(column: Vtree.Container): boolean;
/**
 * Check if the client rectangle of an element or range is located
 * in a column beyond the current one due to the browser's column breaking.
 *
 * @param rect - The client rectangle to check.
 * @param vertical - Whether the layout is vertical.
 * @return the number of columns the end edge of the rectangle is after the current column.
 */
export declare function checkIfBeyondColumnBreaks(rect: Vtree.ClientRect, vertical: boolean): number;
/**
 * Adjust the client rectangle of an element or range to account for
 * the browser's column breaking.
 * This function modifies the rectangle's coordinates to ensure that
 * if the rectangle is located in a column beyond the current one,
 * its position in the block-progression direction is moved accordingly
 * so that overflow checks can be performed based solely on the
 * block-progression position.
 *
 * @param rect - The client rectangle to check.
 * @param vertical - Whether the layout is vertical.
 * @return the number of columns the start edge of the rectangle is after the current column.
 */
export declare function adjustRectForColumnBreaking(rect: Vtree.ClientRect, vertical: boolean): number;
/**
 * Adjust multiple client rectangles for column breaking.
 */
export declare function adjustRectsForColumnBreaking(rects: Vtree.ClientRect[], vertical: boolean): void;
/**
 * Get the client rectangle of an element, adjusted for column breaking.
 */
export declare function getElementClientRectAdjusted(clientLayout: Vtree.ClientLayout, element: Element, vertical: boolean): Vtree.ClientRect;
/**
 * Clear forced column breaks between two nodes.
 * This is used to prevent unnecessary blank pages.
 */
export declare function clearForcedColumnBreaks(prevNode: Node, currNode: Node): void;
/**
 * Find the nearest ancestor element that establishes a multi-column
 * layout but is not the root column element.
 */
export declare function findAncestorNonRootMultiColumn(node: Node): Element | null;
/**
 * Fix overflow caused by forced column breaks in non-root multi-column elements.
 */
export declare function fixOverflowAtForcedColumnBreak(node: Node): void;
/**
 * Calculate the position of the "after" edge in the block-progression.
 * Returns the edge position in pixels if it was determined successfully,
 * and returns NaN if the position could not be determined and the node
 * should be considered zero-height.
 */
export declare function calculateEdge(nodeContext: Vtree.NodeContext, clientLayout: Vtree.ClientLayout, extraOffset: number, vertical: boolean): number;
export declare function getElementHeight(element: Element, column: Layout.Column, vertical: boolean): number;
export declare function isOrphan(node: Node): boolean;
export declare function removeFollowingSiblings(parentNode: Node, viewNode: Node): void;
/**
 * Marks an element as "special". It should not be used in bbox calculations.
 */
export declare const SPECIAL_ATTR = "data-adapt-spec";
export declare function isSpecial(e: Element): boolean;
export declare function isOutOfFlow(node: Node): boolean;
export declare function isSpecialNodeContext(nodeContext: Vtree.NodeContext): boolean;
export declare function isSpecialInlineDisplay(display: string): boolean;
export declare function findAncestorSpecialInlineNodeContext(nodeContext: Vtree.NodeContext): Vtree.NodeContext | null;
