import '../../../assert/js/assert.js';
import '../../../globals.js';
/**
 * A stand-in for the layout-based fields of a Node, but where everything is done in the coordinate frame of the
 * "root" of the Trail. It is a pooled object, so it can be reused to avoid memory issues.
 *
 * NOTE: For layout, these trails usually have the "root" Node equal to the children of the layout constraint's ancestor
 * Node. Therefore, the coordinate space is typically the local coordinate frame of the ancestorNode of the
 * LayoutConstraint. This is not the same as the "global" coordinates for a Scenery Node in general (as most of the root
 * nodes of the trails provided to LayoutProxy will have parents!)
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import Bounds2 from '../../../dot/js/Bounds2.js';
import Vector2 from '../../../dot/js/Vector2.js';
import Orientation from '../../../phet-core/js/Orientation.js';
import Pool from '../../../phet-core/js/Pool.js';
import { Node, Trail } from '../imports.js';
export type Layoutable = Node | LayoutProxy;
export default class LayoutProxy {
    trail: Trail | null;
    /**
     * @param trail - The wrapped Node is the leaf-most node, but coordinates will be handled in the global frame
     * of the trail itself.
     */
    constructor(trail: Trail);
    /**
     * This is where the logic of a poolable type's "initializer" will go. It will be potentially run MULTIPLE times,
     * as if it was constructing multiple different objects. It will be put back in the pool with dispose().
     * It will go through cycles of:
     * - constructor(...) => initialize(...) --- only at the start
     * - dispose()
     * - initialize(...)
     * - dispose()
     * - initialize(...)
     * - dispose()
     * and so on.
     *
     * DO not call it twice without in-between disposals (follow the above pattern).
     */
    initialize(trail: Trail): this;
    private checkPreconditions;
    get node(): Node;
    /**
     * Returns the bounds of the last node in the trail, but in the root coordinate frame.
     */
    get bounds(): Bounds2;
    /**
     * Returns the visibleBounds of the last node in the trail, but in the root coordinate frame.
     */
    get visibleBounds(): Bounds2;
    /**
     * Returns the width of the last node in the trail, but in the root coordinate frame.
     */
    get width(): number;
    /**
     * Returns the height of the last node in the trail, but in the root coordinate frame.
     */
    get height(): number;
    /**
     * Returns the x of the last node in the trail, but in the root coordinate frame.
     */
    get x(): number;
    /**
     * Sets the x of the last node in the trail, but in the root coordinate frame.
     */
    set x(value: number);
    /**
     * Returns the y of the last node in the trail, but in the root coordinate frame.
     */
    get y(): number;
    /**
     * Sets the y of the last node in the trail, but in the root coordinate frame.
     */
    set y(value: number);
    /**
     * Returns the translation of the last node in the trail, but in the root coordinate frame.
     */
    get translation(): Vector2;
    /**
     * Sets the translation of the last node in the trail, but in the root coordinate frame.
     */
    set translation(value: Vector2);
    /**
     * Returns the left of the last node in the trail, but in the root coordinate frame.
     */
    get left(): number;
    /**
     * Sets the left of the last node in the trail, but in the root coordinate frame.
     */
    set left(value: number);
    /**
     * Returns the right of the last node in the trail, but in the root coordinate frame.
     */
    get right(): number;
    /**
     * Sets the right of the last node in the trail, but in the root coordinate frame.
     */
    set right(value: number);
    /**
     * Returns the centerX of the last node in the trail, but in the root coordinate frame.
     */
    get centerX(): number;
    /**
     * Sets the centerX of the last node in the trail, but in the root coordinate frame.
     */
    set centerX(value: number);
    /**
     * Returns the top of the last node in the trail, but in the root coordinate frame.
     */
    get top(): number;
    /**
     * Sets the top of the last node in the trail, but in the root coordinate frame.
     */
    set top(value: number);
    /**
     * Returns the bottom of the last node in the trail, but in the root coordinate frame.
     */
    get bottom(): number;
    /**
     * Sets the bottom of the last node in the trail, but in the root coordinate frame.
     */
    set bottom(value: number);
    /**
     * Returns the centerY of the last node in the trail, but in the root coordinate frame.
     */
    get centerY(): number;
    /**
     * Sets the centerY of the last node in the trail, but in the root coordinate frame.
     */
    set centerY(value: number);
    /**
     * Returns the leftTop of the last node in the trail, but in the root coordinate frame.
     */
    get leftTop(): Vector2;
    /**
     * Sets the leftTop of the last node in the trail, but in the root coordinate frame.
     */
    set leftTop(value: Vector2);
    /**
     * Returns the centerTop of the last node in the trail, but in the root coordinate frame.
     */
    get centerTop(): Vector2;
    /**
     * Sets the centerTop of the last node in the trail, but in the root coordinate frame.
     */
    set centerTop(value: Vector2);
    /**
     * Returns the rightTop of the last node in the trail, but in the root coordinate frame.
     */
    get rightTop(): Vector2;
    /**
     * Sets the rightTop of the last node in the trail, but in the root coordinate frame.
     */
    set rightTop(value: Vector2);
    /**
     * Returns the leftCenter of the last node in the trail, but in the root coordinate frame.
     */
    get leftCenter(): Vector2;
    /**
     * Sets the leftCenter of the last node in the trail, but in the root coordinate frame.
     */
    set leftCenter(value: Vector2);
    /**
     * Returns the center of the last node in the trail, but in the root coordinate frame.
     */
    get center(): Vector2;
    /**
     * Sets the center of the last node in the trail, but in the root coordinate frame.
     */
    set center(value: Vector2);
    /**
     * Returns the rightCenter of the last node in the trail, but in the root coordinate frame.
     */
    get rightCenter(): Vector2;
    /**
     * Sets the rightCenter of the last node in the trail, but in the root coordinate frame.
     */
    set rightCenter(value: Vector2);
    /**
     * Returns the leftBottom of the last node in the trail, but in the root coordinate frame.
     */
    get leftBottom(): Vector2;
    /**
     * Sets the leftBottom of the last node in the trail, but in the root coordinate frame.
     */
    set leftBottom(value: Vector2);
    /**
     * Returns the centerBottom of the last node in the trail, but in the root coordinate frame.
     */
    get centerBottom(): Vector2;
    /**
     * Sets the centerBottom of the last node in the trail, but in the root coordinate frame.
     */
    set centerBottom(value: Vector2);
    /**
     * Returns the rightBottom of the last node in the trail, but in the root coordinate frame.
     */
    get rightBottom(): Vector2;
    /**
     * Sets the rightBottom of the last node in the trail, but in the root coordinate frame.
     */
    set rightBottom(value: Vector2);
    get widthSizable(): boolean;
    get heightSizable(): boolean;
    isSizable(orientation: Orientation): boolean;
    get minimumWidth(): number;
    get minimumHeight(): number;
    getMinimum(orientation: Orientation): number;
    get maxWidth(): number | null;
    set maxWidth(value: number | null);
    get maxHeight(): number | null;
    set maxHeight(value: number | null);
    /**
     * Returns either the maxWidth or maxHeight depending on the orientation
     */
    getMax(orientation: Orientation): number | null;
    attemptPreferredSize(orientation: Orientation, preferredSize: number | null): void;
    get preferredWidth(): number | null;
    set preferredWidth(preferredWidth: number | null);
    get preferredHeight(): number | null;
    set preferredHeight(preferredHeight: number | null);
    get visible(): boolean;
    set visible(value: boolean);
    /**
     * Releases references, and frees it to the pool.
     */
    dispose(): void;
    freeToPool(): void;
    static readonly pool: Pool<typeof LayoutProxy>;
}
//# sourceMappingURL=LayoutProxy.d.ts.map