import { UIObject } from "./UIObject";
import { UIPoint } from "./UIPoint";
import { UIView } from "./UIView";
export type SizeNumberOrFunctionOrView = number | ((constrainingOrthogonalSize: number) => number) | UIView;
export declare class UIRectangle extends UIObject {
    _isBeingUpdated: boolean;
    rectanglePointDidChange?: (b: any) => void;
    private _data;
    private _isLazyCopy;
    constructor(x?: number, y?: number, height?: number, width?: number);
    private _setupPointCallbacks;
    materialize(): void;
    lazyCopy(): UIRectangle;
    get min(): UIPoint;
    set min(value: UIPoint);
    get max(): UIPoint;
    set max(value: UIPoint);
    get minHeight(): number | undefined;
    set minHeight(value: number | undefined);
    get maxHeight(): number | undefined;
    set maxHeight(value: number | undefined);
    get minWidth(): number | undefined;
    set minWidth(value: number | undefined);
    get maxWidth(): number | undefined;
    set maxWidth(value: number | undefined);
    copy(): UIRectangle;
    isEqualTo(rectangle: UIRectangle | null | undefined): boolean;
    static zero(): UIRectangle;
    containsPoint(point: UIPoint): boolean;
    updateByAddingPoint(point: UIPoint): void;
    scale(scale: number): void;
    get height(): number;
    set height(height: number);
    get width(): number;
    set width(width: number);
    get x(): number;
    set x(x: number);
    get y(): number;
    set y(y: number);
    get topLeft(): UIPoint;
    get topRight(): UIPoint;
    get bottomLeft(): UIPoint;
    get bottomRight(): UIPoint;
    get center(): UIPoint;
    set center(center: UIPoint);
    offsetByPoint(offset: UIPoint): this;
    concatenateWithRectangle(rectangle: UIRectangle): this;
    rectangleByConcatenatingWithRectangle(rectangle: UIRectangle): UIRectangle;
    intersectionRectangleWithRectangle(rectangle: UIRectangle): UIRectangle;
    get area(): number;
    intersectsWithRectangle(rectangle: UIRectangle): boolean;
    rectangleWithInsets(left: number, right: number, bottom: number, top: number): UIRectangle;
    rectangleWithInset(inset: number): UIRectangle;
    rectangleWithHeight(height: SizeNumberOrFunctionOrView, centeredOnPosition?: number): UIRectangle;
    rectangleWithWidth(width: SizeNumberOrFunctionOrView, centeredOnPosition?: number): UIRectangle;
    rectangleWithHeightRelativeToWidth(heightRatio?: number, centeredOnPosition?: number): UIRectangle;
    rectangleWithWidthRelativeToHeight(widthRatio?: number, centeredOnPosition?: number): UIRectangle;
    rectangleWithX(x: number, centeredOnPosition?: number): UIRectangle;
    rectangleWithY(y: number, centeredOnPosition?: number): UIRectangle;
    rectangleByAddingX(x: number): UIRectangle;
    rectangleByAddingY(y: number): UIRectangle;
    rectangleByAddingWidth(widthToAdd: number, centeredOnPosition?: number): UIRectangle;
    rectangleByAddingHeight(heightToAdd: number, centeredOnPosition?: number): UIRectangle;
    rectangleWithRelativeValues(relativeXPosition: number, widthMultiplier: number, relativeYPosition: number, heightMultiplier: number): UIRectangle;
    /**
     * Returns a rectangle with a maximum width constraint
     * If current width exceeds max, centers the constrained width
     */
    rectangleWithMaxWidth(maxWidth: number, centeredOnPosition?: number): UIRectangle;
    /**
     * Returns a rectangle with a maximum height constraint
     */
    rectangleWithMaxHeight(maxHeight: number, centeredOnPosition?: number): UIRectangle;
    /**
     * Returns a rectangle with minimum width constraint
     */
    rectangleWithMinWidth(minWidth: number, centeredOnPosition?: number): UIRectangle;
    /**
     * Returns a rectangle with minimum height constraint
     */
    rectangleWithMinHeight(minHeight: number, centeredOnPosition?: number): UIRectangle;
    rectangleByCenteringInRectangle(referenceRectangle: UIRectangle, xPosition?: number, yPosition?: number): UIRectangle;
    rectanglesBySplittingWidth(weights: SizeNumberOrFunctionOrView[], paddings?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], absoluteWidths?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[]): UIRectangle[];
    rectanglesBySplittingHeight(weights: SizeNumberOrFunctionOrView[], paddings?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], absoluteHeights?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[]): UIRectangle[];
    rectanglesByEquallySplittingWidth(numberOfFrames: number, padding?: number): UIRectangle[];
    rectanglesByEquallySplittingHeight(numberOfFrames: number, padding?: number): UIRectangle[];
    distributeViewsAlongWidth(views: UIView[], weights?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], paddings?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], absoluteWidths?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[]): this;
    distributeViewsAlongHeight(views: UIView[], weights?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], paddings?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], absoluteHeights?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[]): this;
    distributeViewsEquallyAlongWidth(views: UIView[], padding: number): this;
    distributeViewsEquallyAlongHeight(views: UIView[], padding: number): this;
    _heightNumberFromSizeNumberOrFunctionOrView(height: SizeNumberOrFunctionOrView): number;
    _widthNumberFromSizeNumberOrFunctionOrView(width: SizeNumberOrFunctionOrView): number;
    rectangleForNextRow(padding?: number, height?: SizeNumberOrFunctionOrView): UIRectangle;
    rectangleForNextColumn(padding?: number, width?: SizeNumberOrFunctionOrView): UIRectangle;
    rectangleForPreviousRow(padding?: number, height?: SizeNumberOrFunctionOrView): UIRectangle;
    rectangleForPreviousColumn(padding?: number, width?: SizeNumberOrFunctionOrView): UIRectangle;
    /**
     * Distributes views vertically as a column, assigning frames and returning them.
     * Each view is positioned below the previous one with optional padding between them.
     * @param views - Array of views to distribute
     * @param paddings - Padding between views (single value or array of values)
     * @param absoluteHeights - Optional fixed heights for views (overrides intrinsic height)
     * @returns Array of rectangles representing the frame for each view
     */
    framesByDistributingViewsAsColumn(views: UIView[], paddings?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], absoluteHeights?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[]): UIRectangle[];
    /**
     * Distributes views horizontally as a row, assigning frames and returning them.
     * Each view is positioned to the right of the previous one with optional padding between them.
     * @param views - Array of views to distribute
     * @param paddings - Padding between views (single value or array of values)
     * @param absoluteWidths - Optional fixed widths for views (overrides intrinsic width)
     * @param centeredOnPosition - Horizontal alignment of the row within this rectangle: 0 = left (default), 0.5 =
     *     center, 1 = right
     * @returns Array of rectangles representing the frame for each view
     */
    framesByDistributingViewsAsRow(views: UIView[], paddings?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], absoluteWidths?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], centeredOnPosition?: number): UIRectangle[];
    /**
     * Distributes views as a grid (2D array), assigning frames and returning them.
     * The first index represents rows (vertical), the second index represents columns (horizontal).
     * Example: views[0] is the first row, views[0][0] is the first column in the first row.
     * Each row is laid out horizontally, and rows are stacked vertically.
     * @param views - 2D array where views[row][column] represents the grid structure
     * @param paddings - Vertical padding between rows (single value or array of values)
     * @param absoluteHeights - Optional fixed heights for each row (overrides intrinsic height)
     * @returns 2D array of rectangles where frames[row][column] matches views[row][column]
     */
    framesByDistributingViewsAsGrid(views: UIView[][], paddings?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], absoluteHeights?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[]): UIRectangle[][];
    rectangleWithIntrinsicContentSizeForView(view: UIView, centeredOnXPosition?: number, centeredOnYPosition?: number): UIRectangle;
    settingMinHeight(minHeight?: number): this;
    settingMinWidth(minWidth?: number): this;
    settingMaxHeight(maxHeight?: number): this;
    settingMaxWidth(maxWidth?: number): this;
    rectangleByEnforcingMinAndMaxSizes(centeredOnXPosition?: number, centeredOnYPosition?: number): UIRectangle;
    assignedAsFrameOfView(view: UIView, isWeakFrame?: boolean): this;
    toString(): string;
    get [Symbol.toStringTag](): string;
    IF(condition: boolean): UIRectangleConditionalChain<UIRectangle>;
    ELSE_IF(condition: boolean): UIRectangle;
    ELSE(): UIRectangle;
    ENDIF(): this;
    ENDIF<T, R>(performFunction: (result: T) => R): R;
    static boundingBoxForPoints(points: UIPoint[]): UIRectangle;
    static boundingBoxForRectanglesAndPoints(rectanglesAndPoints: (UIPoint | UIRectangle)[]): UIRectangle;
    beginUpdates(): void;
    finishUpdates(): void;
    didChange(): void;
    _rectanglePointDidChange(): void;
}
type RectangleChainMethods<TResult> = {
    [K in keyof UIRectangle as (K extends 'IF' | 'ELSE' | 'ELSE_IF' | 'ENDIF' ? never : K)]: UIRectangle[K] extends (...args: infer Args) => infer R ? R extends UIRectangle | UIRectangle[] ? (...args: Args) => UIRectangleConditionalChain<R, TResult> : never : never;
};
type ArrayChainMethods<TResult> = {
    [K in keyof UIRectangle[]]: UIRectangle[][K] extends UIRectangle ? UIRectangleConditionalChain<UIRectangle, TResult> : UIRectangle[][K] extends (...args: infer Args) => infer R ? R extends UIRectangle | UIRectangle[] ? (...args: Args) => UIRectangleConditionalChain<R, TResult> : never : never;
};
type SharedChainMethods<TCurrent, TResult> = {
    IF(condition: boolean): UIRectangleConditionalChain<UIRectangle, TResult>;
    TRANSFORM<R extends UIRectangle>(fn: (current: TCurrent) => R): UIRectangleConditionalChain<R, TResult>;
    ELSE_IF(condition: boolean): UIRectangleConditionalChain<UIRectangle, TResult | TCurrent>;
    ELSE(): UIRectangleConditionalChain<UIRectangle, TResult | TCurrent>;
    ENDIF(): UIRectangle;
    ENDIF<R>(performFunction: (result: TResult | TCurrent) => R): R;
};
type UIRectangleConditionalChain<TCurrent, TResult = TCurrent> = (TCurrent extends UIRectangle ? RectangleChainMethods<TResult> : {}) & (TCurrent extends UIRectangle[] ? ArrayChainMethods<TResult> : {}) & SharedChainMethods<TCurrent, TResult>;
export {};
